我有一个 C# 应用程序代码,在其中我使用互斥锁在创建对象期间同步一些代码。对象构造函数获取互斥体,并且仅在不再需要对象时(在应用程序关闭期间)释放它。因此,释放互斥锁的一个地方是对象析构函数。出现的问题是,有时我在对象析构函数中调用 ReleaseMutex() 时遇到异常。例外是:“对象同步方法是从未同步的代码块中调用的”。看起来,调用对象析构函数的 gabage 收集的线程有时与首先等待互斥锁 (Mutex.WaitOne(false, namedMutex)) 的线程不同。如何在同一线程上同步获取和释放互斥锁以避免此异常?谢谢你的帮助!
public class MyObject
{
static ExtDeviceDriver devDrv;
private Mutex mut = new Mutex(false,myMutex);
public MyObject()
{
mut.WaitOne();
//Thread safe code here.
devDrv = new ExtDeviceDriver();
}
~MyObject()
{
mut.ReleaseMutex();
}
}