boost: comment surveiller le statut du mutex et forcer la libération sur blocage (duplicate)

Dupliquer possible:
Exemple pour boost shared_mutex (plusieurs lectures / une écriture)?

J’essaie d’utiliser les bibliothèques shared_lock et unique_lock de boost pour implémenter un verrou de base lecteur-écrivain sur une ressource. Cependant, certains des threads accédant à la ressource risquent tout simplement de tomber en panne. Je souhaite créer un autre processus qui, à l’aide d’un mutex, surveille le mutex et assure le suivi des processus verrouillés par la ressource et de la durée pendant laquelle chaque processus est verrouillé. Le processus forcera également un processus à libérer son verrou s’il le verrouille pendant plus d’une période donnée.

Toute suggestion sur la façon d’aborder ce problème est grandement appréciée!

Si vous forcez le processus en maintenant le verrou en position de délocking, vous avez vaincu son objective. Imagine mutex pSharedMem->m protège l’access à une partie de la mémoire pSharedMem->mystuff

 pSharedMem->m.get_lock() ; sleep( LONG_TIME ) ; // wake up, not knowing that your "deadlock detector" // has released your mutex pSharedMem->mystuff++ ; // oh-oh... access to shared memory // without the guarding mutex held. // Who knows what will happen! pSharedMem->m.release_lock() ; // you may very well trap or hit some // system specific error because // the mutex is no longer held. 

(écrit explicitement avec get_lock() et release_lock() pour mettre en évidence explicitement la scope du blocage).