1

重複の可能性:
ブースト shared_mutex の例 (複数の読み取り/1 つの書き込み)?

shared_lockboost のライブラリとunique_lockライブラリを使用して、リソースに基本的なリーダー/ライター ロックを実装しようとしています。ただし、リソースにアクセスする一部のスレッドは、単純にクラッシュする可能性があります。ミューテックスを指定してミューテックスを監視し、どのプロセスがリソースをロックしているか、および各プロセスがロックを保持している時間を追跡する別のプロセスを作成したいと考えています。また、プロセスがロックを一定期間以上保持している場合、プロセスはそのロックを強制的に解放します。

この問題にアプローチする方法についての提案は大歓迎です!

4

1 に答える 1

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()andで明示的に書き出されます)。release_lock()

于 2012-11-09T20:07:09.297 に答える