有一系列互斥體。 我的功能:如何等待,直到互斥鎖解鎖?
- 檢查是互斥被鎖定
2A。如果不是,則鎖定它
2b。如果鎖定,等待解鎖並鎖定它
另一個功能將其解鎖。
的問題是,我在等待部碰撞:
HANDLE mutexes[N];
void func(int i)
{
// (*) wait until unlocked or create if unlocked
while ((mutexes[i] = CreateMutex(NULL, TRUE/*same with FALSE*/, NULL)) != NULL);
/*or WaitForSingleObject(mutexes[i], INFINITE)*/
mutexes[i] = CreateMutex(NULL, TRUE, NULL);
}
在(*)指出我有崩潰 - 訪問衝突。當它試圖創建先前已經創建的互斥體[i]時發生崩潰。我不能使用WaitForSingleObject,因爲第一次沒有創建mutexes [i],文檔說WaitForSingleObject是未定義的。此外,如果我使用這個功能,我會得到同樣的崩潰。
所有我需要的就是這樣簡單的僞代碼的模擬
if (mutex_has_been_created[mutexes[i]])
WaitUntilRelease()
CreateMutex();
我試圖把它包在一個關鍵的部分,得到了相同的結果。我確信i
在正確的範圍內。 我不能使用Boost/pThreads/etc。
我知道我的問題很容易,但我找不到解決方案。在我見過的所有例子中,在WaitForSingleObject
之前創建了一個互斥鎖,這對我不起作用。
謝謝。
我認爲CreateMutex意味着鎖定它。我還沒有找到「LockMutex」函數什麼的。 – fogbit
@fogbit:不,CreateMutex初始化互斥鎖。 WaitForSingleObject鎖定它。看到我更新的答案。 – NPE