我正在使用linux,我正在使用pthread_rwlock,它存儲在共享內存中並在多個進程間共享。這大部分工作正常,但是當我在一個進程(SIGKILL)持有一個鎖的時候終止它時,它看起來仍然保持着鎖(不管它是讀或者寫鎖)。pthread_rwlock跨進程:崩潰後修復?
有什麼辦法可以識別這種狀態,甚至可能修復它?
我正在使用linux,我正在使用pthread_rwlock,它存儲在共享內存中並在多個進程間共享。這大部分工作正常,但是當我在一個進程(SIGKILL)持有一個鎖的時候終止它時,它看起來仍然保持着鎖(不管它是讀或者寫鎖)。pthread_rwlock跨進程:崩潰後修復?
有什麼辦法可以識別這種狀態,甚至可能修復它?
真正的答案是找到一個體面的方式來停止一個過程。用SIGKILL
殺死它是不是一個體面的方式來做到這一點。
此功能對於mutexes規定,所謂穩健性(PTHREAD_MUTEX_ROBUST
)而不是rwlocks。該標準沒有提供它,kernel.org甚至沒有關於rwlock的頁面。所以,就像我說的:(?或許可以處理的另一信號)
@cnicutar解除鎖定 - 即「實答案「很可疑。內核的工作是處理釋放資源的交叉流程責任,並確保事物標記一致 - 當事情出錯時,用戶空間不能有效地完成工作。
如果大家都玩得很好,那麼就不需要強大的功能,但對於一個強大的系統,您希望確保系統不會因爲某些錯誤的客戶端進程而停止運行。
我使用SIGKILL專門測試我的解決方案的健壯性。 – mooware