5

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

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

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

如果我在退出应用程序时没有释放互斥锁,会发生什么?互斥锁会被安全处理吗?

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

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

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

4

2 回答 2

6

根据文档,它被废弃(不一定处置)

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

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

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

于 2012-10-23T10:14:56.150 回答
2

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

于 2012-10-23T10:16:38.307 回答