-1

MSDN 文章Mutex Class告诉(在代码示例的注释中):

与 Monitor 不同,Mutex 可以与 WaitHandle.WaitAll 和 WaitAny 一起使用,并且可以跨 AppDomain 边界传递

这是否意味着互斥锁使用非托管资源?
那么,为什么 MSDN 关于 Mutex 使用的代码示例不使用 Dispose()?

4

2 回答 2

2

Mutex 和许多其他同步对象是围绕不同内核对象的包装器(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx),所以是的,它们使用底层的非托管资源。

您应该在使用完它们后调用.Dispose它们,但是,当您的进程退出或启动终结器时(如果您没有处理它们),它们将被释放,所以我想,为了简单起见,它们只是没有Dispose正确地处理它们。

MSDN 关于 WaitHandles 的注释:

在释放对 WaitHandle 的最后引用之前,请始终调用 Dispose。
否则,它正在使用的资源将不会
在垃圾收集器调用 WaitHandle 对象的 Finalize 方法之前被释放。
于 2013-03-01T09:30:12.313 回答
0

是的,您应该处置它,Mutex因为它继承WaitHandle了 implements IDisposable

在内部,Mutex是由CreateMutext创建的内核对象的包装器。我想Dispose.NetMutex类的实现调用CloseHandle关闭内核对象句柄。

无论如何,当进程退出时,系统会自动关闭这样的句柄。

于 2013-03-01T09:35:11.787 回答