我正在考虑互斥体,我需要对它们进行一些说明。我应该尝试打开现有的 Mutex 还是创建新的(当然两者名称相同)。代码示例:
第一次尝试 - 尝试打开现有的:
private void AttemptOne()
{
Mutex myMutex;
if (!Mutex.TryOpenExisting("Mutex Name", out myMutex))
myMutex = new Mutex(false, "Mutex Name");
try
{
myMutex.WaitOne(3000);
// code
}
catch { }
finally
{
myMutex.ReleaseMutex();
// myMutex.Dispose(); - should I call that or it will be called automatically when returning from method?
}
}
第二次尝试 - 创建新的 Mutex:
private void AttemptTwo()
{
using (Mutex mutex = new Mutex(false, "Mutex Name"))
{
try
{
mutex.WaitOne(3000);
// code
}
catch { }
finally { myMutex.ReleaseMutex(); }
}
}
我有一些问题,困扰着我:
尝试使用哪个?
假设我有一个创建了 Mutex 的后台进程,同时主进程尝试做一些工作,这应该被阻止直到 backgorund 进程完成。如果后台进程创建了自己的 Mutex,我应该尝试打开它吗?
或者在主线程中创建新的同名互斥体?
这些尝试之间有什么区别?
我应该在第一次尝试时调用 Dispose() 吗?
或者只是假设 Mutex 将在方法返回时被释放?到时候会处理掉吗?
- 我假设在第二次尝试中,Mutex 将在 using() 结束时被处置(作为其
IDisposable
)。我说得对吗?
最佳答案
如果您打算创建互斥量(如果互斥量根本不存在),那么请继续使用第二种方法。
如果您要基于互斥体的存在而采取不同的行为,那么您应该使用 TryOpenExisting
来检查它是否存在。
关于您的其他问题:
是的,您应该在使用完互斥锁后调用 Dispose
或 Close
方法。为了让操作系统在不使用时销毁它。
是的,使用
会调用Mutex
对象的Dispose
方法。
关于c# - Mutex - TryOpenExisting 与新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740382/