我的应用程序中有一个命名的互斥锁。
private Mutex TaskExitStatus = new Mutex(false, "TaskExit")
我使用TaskExitStatus.WaitOne()
获取方法中的互斥锁如果我在退出应用程序时没有发布互斥锁,会发生什么?互斥锁是否可以安全地配置?
更新1: 在应用程序退出时未释放,命名和未命名的互斥锁是否会表现相同?
更新2 这是我从MSDN link
中读到的内容使用CloseHandle函数关闭句柄。系统关闭 进程终止时自动处理句柄。互斥对象 在最后一个句柄关闭时被销毁。
答案 0 :(得分:4)
根据documentation,它被放弃(不一定处理)
如果线程在拥有互斥锁时终止,则称互斥锁被放弃
另外,请留意关于被遗弃的互斥体的警告:
废弃的互斥锁通常表示代码中存在严重错误。当线程退出但未释放互斥锁时,受互斥锁保护的数据结构可能不处于一致状态。如果可以验证数据结构的完整性,则请求互斥锁所有权的下一个线程可以处理此异常并继续。
答案 1 :(得分:2)
Mutex的目的是维护一个锁(对于跨应用程序的命名互斥锁),直到它被释放。如果不释放互斥锁,则应在资源上保留锁,直到计算机重新启动。