Поток застрял в мьютексе, ожидая при поиске в Boost Interprocess managed_shared_memory - PullRequest
2 голосов
/ 26 мая 2010

Мы используем boost :: interprocess :: managed_shared_memory. Недавно во время тестирования мы обнаружили, что после сбоев процессов поиск в общей памяти застрял в API manage_shared_memory. Мое первоначальное наблюдение заключается в том, что рекурсивная блокировка m_header, которая является членом сегмента_менеджера, находилась в заблокированном состоянии, в то время как процесс аварийно завершал работу и перезапускался. Чтобы преодолеть или исправить такой сценарий, как на самом деле мы обнаруживаем такое состояние.

Примечание: версия библиотеки повышения - 1_35_0

1 Ответ

1 голос
/ 29 июля 2010

Я всегда звоню boost::interprocess::named_upgradable_mutex::remove("mutex name"); до создания мьютекса. Если к мьютексу не присоединен никакой другой процесс, он будет удален, и вы гарантированно получите чистое состояние. Если кто-то присоединен к мьютексу, он просто выдаст ошибку.

...