2015-11-21 193 views
0

我有幾個線程和一個互斥體。一個線程可以鎖定此互斥體,我想另一個線程來解開這個互斥體,但下面的錯誤被拋出:如何讓一個線程解鎖另一個線程鎖定的互斥鎖?

Attempt to unlock a mutex which is locked by another thread 

我怎麼能忽略這個錯誤?或有另一種解決方案?

編輯

我有幾個線程,將做的工作。當第一個線程開始工作時,它會鎖定互斥鎖。其他人可能會出現並開始做同樣的工作。在完成作業的最後一個線程(provavelemnte,而不是第一個)之後,它必須解除互斥鎖。

因此,第一個線程鎖定互斥鎖,並且最後一個線程解鎖。

+3

這就是互斥體應該如何工作 - 你不能鎖定它從一個線程和其他解鎖。你是通過使用互斥體試圖解決的問題是什麼?可能互斥體是不是你的正確選擇 –

回答

0

互斥體是互斥排除的簡稱。這意味着當一個線程接收到作業並鎖定其互斥時,其他線程不應該觸及它,並且實際上應該被阻塞,直到互斥體被釋放(由鎖定它的線程)。

由於您似乎想同時在多個線程上工作,所以我不知道您要如何處理互斥鎖。在您澄清您的使用案例之前,我無法爲您提供適當的替代方案。 :-(

0

實現ThreadError塊救援,即解鎖Mutex這樣的:

​​3210

但要小心:ThreadError可以提高作爲 的其他線程相關的操作結果,你一定是舒爾那麼救援不會崩潰程序邏輯

+0

或只是'重新鎖定'解鎖前的互斥:'mutex.lock; mutex.unlock' –

+0

so ...不要重新鎖定'Mutex'))它可能是'死鎖的原因;遞歸鎖定「,如果你將它重新鎖定在類似的線程中。 –

相關問題