gpt4 book ai didi

c# - Mutex - TryOpenExisting 与新的

转载 作者:行者123 更新时间:2023-12-03 12:49:13 25 4
gpt4 key购买 nike

我正在考虑互斥体,我需要对它们进行一些说明。我应该尝试打开现有的 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 来检查它是否存在。

关于您的其他问题:是的,您应该在使用完互斥锁后调用 DisposeClose 方法。为了让操作系统在不使用时销毁它。

是的,使用会调用Mutex对象的Dispose方法。

关于c# - Mutex - TryOpenExisting 与新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com