.NET Mutex.ReleaseMutex 和 Mutex.Close

Posted

技术标签:

【中文标题】.NET Mutex.ReleaseMutex 和 Mutex.Close【英文标题】:.NET Mutext.ReleaseMutex and Mutex.Close 【发布时间】:2011-09-22 18:13:22 【问题描述】:

这两者有什么区别?如果我在关闭我的应用程序时使用Mutex.Close() 而不是Mutex.Release(),会有什么副作用?

【问题讨论】:

【参考方案1】:

ReleaseMutex 用于允许另一个线程获取互斥锁。只有在您获得互斥体(称为WaitOne 并获得它或通过构造函数获得)时才应调用它。 重要提示如果您还没有获得互斥体,ReleaseMutex 会抛出异常。

Close用于清理通过声明互斥对象分配的资源,无论你是否阻塞过它,如果你获得了互斥体,它将释放它(相当于调用ReleaseMutex。如果您打算锁定整个应用程序的互斥锁(即使用它来确保您的应用程序的单个实例),那么我会将它包装在一个 using 语句中,如 Joseph Albahari's 线程指南中的示例(必须阅读)。

【讨论】:

感谢您的澄清。我听取了您的建议,并将我的解决方案 (here) 中的 Mutex.ReleaseMutex() 更改为 Mutex.Close(),以解决 VB 的应用程序框架和 ClickOnce API 之间的冲突。

以上是关于.NET Mutex.ReleaseMutex 和 Mutex.Close的主要内容,如果未能解决你的问题,请参考以下文章

asp.net和ado.net有啥区别?

.NET和.NET Framework的关系

最全.NET Core .NET 5.NET 6和.NET 7简介和区别

ado.net和asp.net区别?

.net core 3.0和.net5有什么区别

Linq和ADO.net的区别