我正在尝试使用 boost 中的shared_lock
和unique_lock
库来实现对资源的基本读写锁。但是,一些访问资源的线程可能会简单地崩溃。我想创建另一个进程,给定一个互斥锁,监视互斥锁并跟踪哪些进程锁定了资源以及每个进程锁定了多长时间。如果进程拥有锁的时间超过给定时间段,该进程还将强制进程释放其锁。
非常感谢任何有关如何解决此问题的建议!
我正在尝试使用 boost 中的shared_lock
和unique_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()
以显式突出锁定保持的范围)。