我有一个应用程序创建了一个需要锁定的对象,因为该对象创建了一个外部硬件设备对象(通过第三方 DLL),并且硬件设备对象只能创建一次。当启动此应用程序的多个实例时,只有第一个实例应该能够创建此 C# 对象。子序列实例应该看到对象已被锁定并且无法创建对象。我使用了互斥体,因为此对象创建发生在多个应用程序实例(多个进程)中。但是,该代码不会与互斥锁一起锁定。我是否正在运行多个实例,每个实例都创建自己的锁?
public sealed class MyObject
{
private static MyObject _myObject;
static ExtDeviceDriver devDrv;
private readonly static Mutex mut = new Mutex();
private MyObject()
{
mut.WaitOne();
//Thread safe code here.
devDrv = new ExtDeviceDriver();
}
~MyObject()
{
mut.ReleaseMutex();
}
// object accessor
public static MyObject GetMyObject
{
get
{
if (_myObject == null)
_myObject = new MyObject();
return _myObject;
}
}
}