同じミューテックスを共有する2つのプロセス(A、B)があります(WaitForSingleObject / ReleaseMutex呼び出しを使用)。すべて正常に動作しますが、プロセスAがクラッシュすると、プロセスBは順調にハミングします。プロセスAを再開すると、デッドロックが発生します。
詳細な調査により、プロセスAがクラッシュした後、プロセスBがReleaseMutex()を2回正常に呼び出すことができることがわかりました。
私の解釈:プロセスAがクラッシュした後も、ミューテックスはロックされたままですが、ミューテックスの所有権はプロセスBにすぐに移ります(これはバグです)。そのため、WaitForSingleObject(WAIT_OBJECT_0を返す)とReleaseMutex(TRUEを返す)を呼び出して、楽しくハミングしています。
プロセスAのクラッシュによってミューテックスが解放されるように、ミューテックスと同様の名前付き同期プリミティブを使用することは可能ですか?
1つの解決策は、SEHを使用してクラッシュをキャッチし、ミューテックスを解放することですが、プロセスのクラッシュ時にそのようにデッドロックしない堅牢なプリミティブがWindowsにあることを本当に望んでいます。