(WaitForSingleObject/ReleaseMutex呼び出しを使用して)同じmutexを共有する2つのプロセス(A、B)があります。すべてうまく動作しますが、プロセスAがクラッシュすると、プロセスBはうまくハミングしています。プロセスAを再起動すると、デッドロックが発生します。Win32プロセスがクラッシュしたときに名前付きミューテックスが解放されない
深い調査では、プロセスAがクラッシュした後、プロセスBがReleaseMutex()を2回正常に呼び出すことができます。
私の解釈:プロセスAがクラッシュした後でも、ミューテックスはロックされていますが、ミューテックスの所有権はプロセスB(バグ)に容易に移ります。 WaitForSingleObject(WAIT_OBJECT_0を取得)とReleaseMutex(TRUEを返す)を呼び出すことで、うれしいことにハミングアップするのです。
プロセスAのクラッシュがミューテックスを解放するような方法で、Mutexに似た名前付き同期プリミティブを使用できますか?
解決策の1つは、SEHを使用してクラッシュを捕捉してミューテックスを解放することですが、Windowsにはプロセスクラッシュのようなデッドロックのない堅牢なプリミティブがあることを願っています。
これはあなたが読める面白い記事です:http://blogs.msdn.com/b/oldnewthing/archive/2005/09/12/463977.aspx –