2011-07-05 83 views
1

我正在使用linux,我正在使用pthread_rwlock,它存儲在共享內存中並在多個進程間共享。這大部分工作正常,但是當我在一個進程(SIGKILL)持有一個鎖的時候終止它時,它看起來仍然保持着鎖(不管它是讀或者寫鎖)。pthread_rwlock跨進程:崩潰後修復?

有什麼辦法可以識別這種狀態,甚至可能修復它?

回答

1

真正的答案是找到一個體面的方式來停止一個過程。用SIGKILL殺死它是不是一個體面的方式來做到這一點。

此功能對於mutexes規定,所謂穩健性(PTHREAD_MUTEX_ROBUST而不是rwlocks。該標準沒有提供它,kernel.org甚至沒有關於rwlock的頁面。所以,就像我說的:(?或許可以處理的另一信號)

  • 找到另一種方式來停止進程
  • 當您退出
+0

我使用SIGKILL專門測試我的解決方案的健壯性。 – mooware

1

@cnicutar解除鎖定 - 即「實答案「很可疑。內核的工作是處理釋放資源的交叉流程責任,並確保事物標記一致 - 當事情出錯時,用戶空間不能有效地完成工作。

如果大家都玩得很好,那麼就不需要強大的功能,但對於一個強大的系統,您希望確保系統不會因爲某些錯誤的客戶端進程而停止運行。