为什么以下结构会导致AbandonedMutexException.即使有错误或方法返回.互斥体正在被释放.
static Mutex WriteMutex = new Mutex(false, @"Global\mutex2203"); public static void Demo() { try { WriteMutex.WaitOne(); //rest of coding stuff here } finally { WriteMutex.ReleaseMutex(); } }
接收报告无法重新生成错误.
编辑:WriteMutex.WaitOne();
没有其他代码发生异常.只有这种方法才能触及互斥锁.
一个AbandonedMutexException
当一个线程获取被抛出Mutex
另一个线程已经通过不释放(参见离开废弃对象AbandonedMutexException).您在问题中引用的代码不一定是导致异常的代码,只是"接收"它(即检测抛出异常的情况).
也就是说,另一个线程中的代码(可能是相同的方法但可能不是)获取Mutex
但不释放它并允许其线程退出而Mutex
不会被释放.然后运行上面显示的代码的线程在尝试获取时抛出异常Mutex
.