作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑互斥体,我需要对它们进行一些说明。我应该尝试打开现有的 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 将在方法返回时被释放?到时候会处理掉吗?
IDisposable
)。我说得对吗?最佳答案
如果您打算创建互斥量(如果互斥量根本不存在),那么请继续使用第二种方法。如果您要基于互斥体的存在而采取不同的行为,那么您应该使用 TryOpenExisting
来检查它是否存在。
关于您的其他问题:是的,您应该在使用完互斥锁后调用 Dispose
或 Close
方法。为了让操作系统在不使用时销毁它。
是的,使用
会调用Mutex
对象的Dispose
方法。
关于c# - Mutex - TryOpenExisting 与新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740382/
我正在考虑互斥体,我需要对它们进行一些说明。我应该尝试打开现有的 Mutex 还是创建新的(当然两者名称相同)。代码示例: 第一次尝试 - 尝试打开现有的: private void AttemptO
我是一名优秀的程序员,十分优秀!