MSDN 文章Mutex Class告诉(在代码示例的注释中):
与 Monitor 不同,Mutex 可以与 WaitHandle.WaitAll 和 WaitAny 一起使用,并且可以跨 AppDomain 边界传递
这是否意味着互斥锁使用非托管资源?
那么,为什么 MSDN 关于 Mutex 使用的代码示例不使用 Dispose()?
MSDN 文章Mutex Class告诉(在代码示例的注释中):
与 Monitor 不同,Mutex 可以与 WaitHandle.WaitAll 和 WaitAny 一起使用,并且可以跨 AppDomain 边界传递
这是否意味着互斥锁使用非托管资源?
那么,为什么 MSDN 关于 Mutex 使用的代码示例不使用 Dispose()?
Mutex 和许多其他同步对象是围绕不同内核对象的包装器(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx),所以是的,它们使用底层的非托管资源。
您应该在使用完它们后调用.Dispose
它们,但是,当您的进程退出或启动终结器时(如果您没有处理它们),它们将被释放,所以我想,为了简单起见,它们只是没有Dispose
正确地处理它们。
MSDN 关于 WaitHandles 的注释:
在释放对 WaitHandle 的最后引用之前,请始终调用 Dispose。 否则,它正在使用的资源将不会 在垃圾收集器调用 WaitHandle 对象的 Finalize 方法之前被释放。
是的,您应该处置它,Mutex
因为它继承WaitHandle
了 implements IDisposable
。
在内部,Mutex
是由CreateMutext创建的内核对象的包装器。我想Dispose
.NetMutex
类的实现调用CloseHandle
关闭内核对象句柄。
无论如何,当进程退出时,系统会自动关闭这样的句柄。