MSDN文章Mutex Class告诉(在对代码示例的评论中):
与Monitor不同,Mutex可以与WaitHandle.WaitAll一起使用 WaitAny,可以通过AppDomain边界传递
这是否意味着互斥量会使用非托管的resurces? 那么,为什么Mutex使用的MSDN代码示例不使用Dispose()?
答案 0 :(得分:2)
Mutex和许多其他同步对象是围绕不同内核对象(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx)的包装器,所以是的,它们使用了非托管资源。
当你完成它们时你应该调用.Dispose
,但是,当你的进程退出或者启动时终结器(如果你没有处理它们)时它们将被释放,所以我想,为了简单起见他们只是没有Dispose
他们正确的例子。
MSDN关于WaitHandles的注意事项:
Always call Dispose before you release your last reference to the WaitHandle. Otherwise, the resources it is using will not be freed until the garbage collector calls the WaitHandle object's Finalize method.
答案 1 :(得分:0)
是的,您应该释放Mutex
,因为它继承了实现WaitHandle
的{{1}}。
在内部,IDisposable
是CreateMutext创建的内核对象的包装器。我想.Net Mutex
类的Dispose
实现调用Mutex
来关闭内核对象句柄。
在任何情况下,当进程退出时,系统会自动关闭这样的句柄。