. net互斥锁是否使用非托管资源?
本文关键字:资源 是否 net | 更新日期: 2023-09-27 18:01:37
MSDN文章互斥类告诉(在代码示例的注释中):
与Monitor不同,Mutex可以与waithhandle一起使用。WaitAll和WaitAny,并且可以跨AppDomain边界传递
这是否意味着互斥锁使用非托管资源?
那么,为什么MSDN代码示例中使用互斥锁不使用Dispose()?
互斥锁和许多其他同步对象是不同内核对象(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx)的包装器,因此,它们在底层使用非托管资源。
你应该调用.Dispose
当你用完它们,然而,他们将被释放当你的进程退出或结束与启动(如果你没有处置他们),所以我猜,为了简单的例子,他们只是没有正确地Dispose
他们。
MSDN关于WaitHandles的说明:
<>之前总是在释放对WaitHandle的最后一个引用之前调用Dispose。否则,它正在使用的资源将不存在被释放,直到垃圾收集器调用WaitHandle对象的Finalize方法。是的,您应该处置Mutex
,因为它继承了实现IDisposable
的WaitHandle
。
内部,Mutex
是由CreateMutext创建的内核对象的包装器。我认为。net Mutex
类的Dispose
实现调用CloseHandle
来关闭内核对象句柄。
在任何情况下,当进程退出时,这样的句柄将被系统自动关闭。