所以我这样称呼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/

10-10 14:33