2
我開發在一箇舊的代碼庫已經在幾個地方下面的代碼:爲什麼我收到「互斥體不屬於」異常
Mutex mutex = new Mutex(false, "<some mutex name>");
mutex.WaitOne();
try {
// do something
} finally {
mutex.ReleaseMutex();
}
這些互斥鎖用於進程內同步,所以我重寫了他們用locks代替,問題似乎消失了。
我知道代碼不是那裏最好的代碼(與What is a good pattern for using a Global Mutex in C#?相比),但是這並不能解釋爲什麼mutex.ReleaseEmutex()偶爾會拋出「互斥量未被擁有」。
所以我問上面的代碼中有什麼缺失(或錯誤),產生異常?
什麼是「//做一些事情」,實際上在做什麼?難道它會釋放互斥鎖(在某些情況下)。 –
在某些情況下,在處理列表(搜索,添加和刪除元素)時使用/在其他情況下通過TCP發送/接收消息。它也被用於鎖定log4net調用,如logger.Debug(「message」)(不太確定爲什麼log4net應該關注鎖定)。 –
如果這確實是代碼,那麼'ReleaseMutex'調用不應該拋出該異常。你確定「做某事」代碼中沒有任何內容釋放互斥嗎?代碼是否總是調用'WaitOne'而不是'WaitOne(timeout)'? –