【发布时间】:2016-03-30 13:35:10
【问题描述】:
我有一个多线程应用程序,不同的线程可能想要执行一个操作。我尝试使用 Mutex 来确保该线程在运行时不会启动操作。
System.Threading.Mutex mutex;
bool isRunning = System.Threading.Mutex.TryOpenExisting(name, out mutex);
if (!isRunning)
{
RunMethod();
}
在我创建互斥锁的方法中,并尝试在最后释放它:
var mutex = new Mutex(true, name);
try{
//do stuff, it takes some time
}
finally
{
//TODO: I want to get rid of Mutex here
}
如何摆脱互斥锁?因为即使在我调用mutex.ReleaseMutex() 和mutex.Close() 之后,它仍然存在并且可以找到。我如何知道该操作当前正在运行或已完成?
还有其他方法吗?
【问题讨论】:
-
我建议使用以下事件之一:
AutoResetEvent或ManualResetEvent而不是Mutex。不过,这里没有足够的代码让我为您制定更正式的答案。
标签: c# multithreading mutex