如果父应用程序未释放互斥对象,将会发生什么情况

Roc*_*art 5 c# multithreading mutex

我的应用程序中有一个已命名的互斥体。

 private Mutex TaskExitStatus = new Mutex(false, "TaskExit")
Run Code Online (Sandbox Code Playgroud)

我使用TaskExitStatus.WaitOne()在方法中获取互斥量

如果我在退出应用程序时不释放互斥锁,将会发生什么?互斥锁可以安全处置吗?

更新1: 在应用程序退出时未释放时,已命名和未命名的互斥体的行为是否相同?

更新2 这是我从MSDN链接中读取的内容

使用CloseHandle函数关闭句柄。进程终止时,系统会自动关闭句柄。当其最后一个句柄关闭时,互斥对象将被销毁。

Jam*_*mes 5

根据文档,它是废弃的(不一定要丢弃)

如果线程在拥有互斥锁时终止,则认为该互斥锁已被放弃

另外,请注意有关废弃互斥体的警告:

废弃的互斥锁通常表示代码中存在严重错误。当线程退出而不释放互斥锁时,互斥锁保护的数据结构可能不会处于一致状态。如果可以验证数据结构的完整性,则请求互斥量所有权的下一个线程可以处理此异常并继续。