boost:如何监视互斥锁的状态和强制释放死锁

时间:2012-11-09 18:37:34

标签: c++ multithreading boost mutex

  

可能重复:
  Example for boost shared_mutex (multiple reads/one write)?

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

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

1 个答案:

答案 0 :(得分:1)

如果您强制执行持有锁定的进程,那么您已经失去了锁定的目的。想象一下,互斥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()明确写出来明确突出锁定保留的范围。)