这个问题已经在这里有了答案:




7年前关闭。






我正在尝试使用boost中的shared_lockunique_lock库在资源上实现基本的读写器锁定。但是,某些访问资源的线程可能会崩溃。我想创建另一个进程,给定一个互斥锁,它监视互斥锁并跟踪哪些进程锁定了资源以及每个进程锁定了多长时间。如果该进程拥有锁定的时间超过给定的时间段,则该进程还将强制该进程释放其锁定。

非常感谢您对如何解决此问题的任何建议!

最佳答案

如果您强制释放持有锁的进程,那么您就无法实现锁的目的。想象一下互斥锁pSharedMem->m保护对内存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.

(用get_lock()release_lock()明确写出,以突出显示锁保持的范围)。

07-28 01:32