所以我这样称呼createmutex
while(1){
HANDLE h;
h=CreateMutex(NULL,TRUE,"mutex1");
y=WaitForSingleObject(h,INFINITE);
///random code
ReleaseMutex(h)
}
循环两次后,它运行良好,但在第三次循环后,在WaitForSingleObject(h,INFINITE)上出现了死锁。这是同时运行的两个线程。调用ReleaseMutex时如何死锁? createmutex函数是否正确调用?
最佳答案
您正在等待已经拥有的互斥锁...请不要这样做。
另外,您不会销毁互斥锁,而只是释放它。下一个调用应该给您ERROR_ALREADY_EXISTS
。 MSDN的完整报价为"If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError
returns ERROR_ALREADY_EXISTS
, bInitialOwner is ignored, and the calling thread is not granted ownership."
如果任何“随机代码”等待另一个线程取得进展,则在拥有互斥锁时可能会死锁。在这种情况下,另一个线程将永远等待获取互斥体,这就是您所看到的行为。
关于c++ - CreateMutex困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5125342/