3

boost::interprocess::named_upgradable_mutexいくつかのプロセスを同期するために使用しています。

ミューテックスをロックするためにboost::interprocess::sharable_lockとを使用しています。boost::interprocess::scoped_lock

同期をテストするとき、プロセスが機能している限り正常に見え、正常に閉じられます。

しかし、ミューテックスを保持しているときにプロセスが(たとえば、TaskManagerを介して)強制終了された場合、ミューテックスはロックされたままになることに気付きました。

プロセスの失敗をどのように処理できるか考えていますか?

万が一に備えて使うことを考えましtimed_lock()た...他に何かアイデアはありますか?

4

2 に答える 2

1

問題ではなく症状に取り組んでいます。ミューテックスの目的は、プロセスまたはスレッドが共有データを矛盾した状態にできるようにすることです。ミューテックスを保持している間にプロセスが終了した場合、共有データはまだ一貫性のない状態にあります。問題は、ミューテックスのロックを解除する方法ではなく、共有データを一貫した状態に戻す方法です。

共有データを整合性のある状態に戻すときは、整合性のある状態に戻すデータにミューテックスまたはロックを含めます。最も簡単な方法は、既存のロックを削除して新しいロックを作成することです。共有データについても同じことを行う必要があります。

ただし、本当にこれを行う必要がある場合は、おそらくその仕事に適したツールを使用していないことをお勧めします.

于 2011-12-14T09:27:21.683 に答える
0

何らかの理由でアプリを強制終了した場合は、Windows からログアウトするか、mutex.unlock(); コマンドを実行して、このロックを解除できます。

于 2012-05-12T20:20:49.933 に答える