释放互斥锁时的例外情况。什么可能导致这个?

时间:2011-10-06 19:56:56

标签: c# synchronization mutex

我在以下代码中释放互斥锁时遇到以下异常“从非同步代码块调用对象同步方法”:

int count = 0;
try
{
     mutex.WaitOne();
     count = requests_sent.Count;
}
catch
{
}
finally
{
     mutex.ReleaseMutex();
}
request_sent是其他线程正在访问(读/写)的字典,但我不知道为什么这段代码会抛出异常。有人有什么想法吗?

2 个答案:

答案 0 :(得分:8)

将WaitOne()调用移到try块上方。您只想在知道获取互斥锁时释放互斥锁。

你现在也有机会获得更好的诊断。

答案 1 :(得分:3)

阅读MSDN

ApplicationException    
The calling thread does not own the mutex.

WaitOne() 方法可能会抛出异常,而不会获取互斥锁。因此,当您尝试发布它时,您会遇到另一个例外。