2010-05-26 15 views
2

Nous utilisons boost :: interprocess :: managed_shared_memory. Récemment, lors des tests, nous avons constaté que les threads de plantage de processus après la recherche dans la mémoire partagée étaient bloqués dans les API manage_shared_memory. Mon observation initiale est que le verrou récursif m_header qui est membre de segment_manager était en état verrouillé alors que le processus plantait et redémarrait. Pour surmonter ou corriger un tel scénario, comment nous détectons réellement une telle condition.Thread bloqué dans le mutex lors d'une recherche dans Boost Interprocess managed_shared_memory

Note: boost version bibliothèque est 1_35_0

Répondre

1

Je fais toujours appel boost::interprocess::named_upgradable_mutex::remove("mutex name"); avant instancier le mutex. Si aucun autre processus n'est attaché au mutex, il sera supprimé et vous aurez la certitude d'avoir un état propre. Si quelqu'un est attaché au mutex alors ce sera juste une erreur.