如果父应用程序未释放互斥锁对象会发生什么

时间:2012-10-23 10:11:34

标签: c# multithreading mutex

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

 private Mutex TaskExitStatus = new Mutex(false, "TaskExit")

我使用TaskExitStatus.WaitOne()

获取方法中的互斥锁

如果我在退出应用程序时没有发布互斥锁,会发生什么?互斥锁是否可以安全地配置?

更新1: 在应用程序退出时未释放,命名和未命名的互斥锁是否会表现相同?

更新2 这是我从MSDN link

中读到的内容
  

使用CloseHandle函数关闭句柄。系统关闭   进程终止时自动处理句柄。互斥对象   在最后一个句柄关闭时被销毁。

2 个答案:

答案 0 :(得分:4)

根据documentation,它被放弃(不一定处理)

  

如果线程在拥有互斥锁时终止,则称互斥锁被放弃

另外,请留意关于被遗弃的互斥体的警告:

  

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

答案 1 :(得分:2)

Mutex的目的是维护一个锁(对于跨应用程序的命名互斥锁),直到它被释放。如果不释放互斥锁,则应在资源上保留锁,直到计算机重新启动。