Jak*_*ake 1 c++ multithreading
所以我像这样调用了createmutex
while(1){
HANDLE h;
h=CreateMutex(NULL,TRUE,"mutex1");
y=WaitForSingleObject(h,INFINITE);
///random code
ReleaseMutex(h)
}
Run Code Online (Sandbox Code Playgroud)
循环两次后运行良好,但在第三次循环后在 WaitForSingleObject (h,INFINITE) 上死锁。这是两个线程同时运行的情况。调用ReleaseMutex怎么会死锁呢?createmutex 函数是否正确调用?
您正在等待已拥有的互斥锁...请不要这样做。
另外,您不会破坏互斥锁,而只是释放它。下一个电话应该会给你ERROR_ALREADY_EXISTS。MSDN 的完整引用是“如果互斥体是命名互斥体并且该对象在此函数调用之前存在,则返回值是现有对象的句柄,GetLastError返回ERROR_ALREADY_EXISTS, bInitialOwner 被忽略,并且调用线程不被授予所有权。”
如果任何“随机代码”等待另一个线程取得进展,则它在拥有互斥体时可能会发生死锁。在这种情况下,另一个线程将永远等待尝试获取互斥体,这就是您所看到的行为。
| 归档时间: |
|
| 查看次数: |
4871 次 |
| 最近记录: |