. net互斥锁是否使用非托管资源?

本文关键字:资源 是否 net | 更新日期: 2023-09-27 18:01:37

MSDN文章互斥类告诉(在代码示例的注释中):

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

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

. net互斥锁是否使用非托管资源?

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

你应该调用.Dispose当你用完它们,然而,他们将被释放当你的进程退出或结束与启动(如果你没有处置他们),所以我猜,为了简单的例子,他们只是没有正确地Dispose他们。

MSDN关于WaitHandles的说明:

<>之前总是在释放对WaitHandle的最后一个引用之前调用Dispose。否则,它正在使用的资源将不存在被释放,直到垃圾收集器调用WaitHandle对象的Finalize方法。

是的,您应该处置Mutex,因为它继承了实现IDisposableWaitHandle

内部,Mutex是由CreateMutext创建的内核对象的包装器。我认为。net Mutex类的Dispose实现调用CloseHandle来关闭内核对象句柄。

在任何情况下,当进程退出时,这样的句柄将被系统自动关闭。