我遇到的情况是,我可能同时运行一个程序的多个实例,并且重要的是,不要同时在多个实例中执行一个特定函数。
这是使用互斥锁来防止这种情况发生的正确方法吗?
lock (this.GetType()) {
_log.Info("Doing Sync");
DoSync();
_log.Info("Sync Completed");
}
您说的是一个应用程序的多个实例,所以我们谈论的是两个program.exe 正在运行,对吧? lock 语句不会跨多个程序加锁,只会在程序内加锁。如果你想要一个真正的互斥锁,请查看系统.线程.互斥体 https://learn.microsoft.com/en-us/dotnet/api/system.threading.mutex object.
这是一个用法示例:
bool createdNew;
using (Mutex mtx = new Mutex(false, "MyAwesomeMutex", out createdNew))
{
try
{
mtx.WaitOne();
MessageBox.Show("Click OK to release the mutex.");
}
finally
{
mtx.ReleaseMutex();
}
}
createdNew 变量会让您知道它是否是第一次创建。但它只告诉您它是否已创建。如果要获取锁,需要调用WaitOne,然后调用ReleaseMutex释放锁。如果您只想查看是否创建了互斥锁,那么只需构建它就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)