2012-08-06 85 views
0

我想找到我的問題的解決方案:我有使用共享內存共享數據的一些過程。爲了同步,我使用互斥鎖。但是當一個鎖定互斥鎖的進程崩潰時,所有其他進程也會崩潰。那麼如何避免這個問題呢?互斥多進程

+0

墜毀第一方法可能是創建該共享存儲器中的一個,所以,當它碰撞,共享存儲器丟失。所以所有其他進程不再訪問有效的內存地址,並且它們沒有足夠的錯誤處理。 – Jay 2012-08-06 03:22:52

+0

如果創建共享內存的進程沒有崩潰?墜毀的過程是另一個? – thanhtv 2012-08-06 03:52:16

+0

如果創建的共享存儲器中的過程中沒有崩潰,另外應該不會崩潰,除非有其他原因,如在共享存儲器中損壞的數據。 – Jay 2012-08-06 03:58:49

回答

0

行爲取決於其互斥實現您正在使用(例如WinAPI的,並行線程...)。

例如,在WinAPI中,如果持有互斥鎖的進程沒有釋放它,則等待該互斥鎖的其他進程將從WaitForSingleObject等函數接收返回值WAIT_ABANDONED。有可能你沒有處理它。

其他庫可能有自己的怪癖和實施細則,並應進行相應的審查。

此外還要確保你談論的是多進程而不是多線程,因爲在單個進程下的多個線程的情況下,在某些實現下,如果該進程的第一個線程死掉 - 那麼所有線程在那個過程中。

+0

是的,我正在談論多進程。我使用pthread。我發現這個函數:'pthread_mutex_timedlock_np'。這件事可以幫助我嗎? – thanhtv 2012-08-08 01:15:00