在ReleaseMutex之前,在Mutex上关闭手柄 - 会发生什么?

Ric*_*ein 4 c++ multithreading mutex

如果我在线程完成互斥锁之前在互斥锁上调用CloseHandle,因此尚未调用ReleaseMutex,那么预期的行为是什么?

Rem*_*eau 12

CloseHandle()立即销毁传递给它的句柄.如果使用关闭的互斥锁句柄调用,ReleaseMutex()则会失败并显示ERROR_INVALID_HANDLE错误代码.

如果互斥锁而得名,有一个单一的引用计数的内核对象支持互斥,但CreateMutex()OpenMutex()返回唯一HANDLE必须被单独关闭值.如果创建/打开了同一个命名互斥锁的多个句柄,则调用CloseHandle()一个句柄不会影响同一个互斥锁的其他句柄.


Han*_*ant 10

最严重的后果是正在等待互斥锁被解除阻塞的线程.WaitXxx调用返回WAIT_ABANDONED.在这一点上,调用TerminateProcess是一个非常好的主意,因为你不知道到底发生了什么.