我有2個進程(A,B)共享相同的互斥體(使用WaitForSingleObject/ReleaseMutex調用)。一切工作正常,但當進程A崩潰時,進程B快樂地嗡嗡作響。當我重新啓動進程A時,存在死鎖。Win32當進程崩潰時,不會釋放互斥體
深入調查顯示進程B在進程A崩潰後可以成功調用ReleaseMutex()兩次。
我的解釋:在進程A崩潰後,互斥鎖仍然被鎖定,但互斥量的所有權很容易轉移到進程B(這是一個錯誤)。這就是爲什麼它快樂地嗡嗡聲,調用WaitForSingleObject(返回WAIT_OBJECT_0)和ReleaseMutex(返回TRUE)。
是否有可能使用與Mutex類似的命名同步原語,使得進程A中的崩潰將釋放互斥鎖?
一個解決方案是使用SEH並捕獲崩潰並釋放互斥鎖,但我真的希望Windows有一個強大的基元,在進程崩潰時不會出現死鎖。
這可能是一個有趣的文章,供您閱讀:http://blogs.msdn.com/b/oldnewthing/archive/2005/09/12/463977.aspx – 2013-02-20 16:52:32