释放互斥对象时的异常.是什么导致的呢?

本文关键字:是什么 异常 对象 释放 | 更新日期: 2023-09-27 18:10:41

当释放下面代码中的互斥锁时,我得到了以下异常"对象同步方法从未同步的代码块中调用":

int count = 0;
try
{
     mutex.WaitOne();
     count = requests_sent.Count;
}
catch
{
}
finally
{
     mutex.ReleaseMutex();
}

requests_sent是一个正在被其他线程访问(读/写)的字典,但我不知道为什么这段代码会抛出异常。有人有什么想法吗?

释放互斥对象时的异常.是什么导致的呢?

将WaitOne()调用移到try块上方。只有当你知道你已经获得互斥锁时,你才想要释放它。

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

读了 MSDN :

ApplicationException    
The calling thread does not own the mutex.
WaitOne()方法可能在没有获取互斥锁的情况下抛出异常。当你试图释放它时,你会得到另一个异常。