Boostのshared_lockライブラリとunique_lockライブラリを使用して、リソースに基本的なリーダーライターロックを実装しようとしています。ただし、リソースにアクセスするスレッドの中には、単にクラッシュする可能性があるものがあります。ミューテックスを指定してミューテックスを監視し、どのプロセスがリソースをロックし、各プロセスがどのくらいの期間ロックされているかを追跡する別のプロセスを作成したいと思います。また、プロセスは、指定された期間を超えてロックを保持している場合、プロセスにロックを解放するように強制します。
ブーストロックはすべてスコープロックであり、スコープ外になると自動的にロックが解除されますが、サーバーがクラッシュした場合でも問題は解決しないため、SIGSEGVがプロセスに送信されて強制終了されます。強制終了されたプロセスは、デストラクタを呼び出さないため、保持されているリソースを解放しません。
考えられる解決策の1つは、ロックにタイマーを設定して、一定期間のロック後にプロセスが強制的にロックを解除するようにすることです。これはロックの概念に反しますが、この場合は機能します。これは、いずれかのプロセスがたとえば5分を超えてロックを保持している場合、プロセスが強制終了されたか、存在していると言っても安全であるためです。デッドロック状態。
この問題に取り組む方法についての提案は大歓迎です!
以前のスレッドは「重複の可能性がある」ために閉じられましたが、記載されている重複する質問は私の質問に答えません。