0
比方說,我叫createmutex問題
h=CreateMutex(NULL,FALSE,"full");
y=WaitForSingleObject(h,INFINITE);
//Read from a queue (critical section)
ReleaseMutex(h);
什麼問題都可以出現的可能會導致訪問衝突閱讀位置?
例如,多個線程可以同時進入該關鍵部分嗎?
比方說,我叫createmutex問題
h=CreateMutex(NULL,FALSE,"full");
y=WaitForSingleObject(h,INFINITE);
//Read from a queue (critical section)
ReleaseMutex(h);
什麼問題都可以出現的可能會導致訪問衝突閱讀位置?
例如,多個線程可以同時進入該關鍵部分嗎?
雖然您將這些函數的結果存儲在變量中,但您並未讀取它們以確定函數是否成功。也許你沒有創建或打開給定的互斥鎖,因此h
爲0.或者,也許不是獲取互斥鎖的所有權,而是等待失敗。無論哪種情況,您都應該致電GetLastError
找出原因,然後不要執行代碼的受保護部分。
一個互斥對象可能被放棄放棄。這意味着先前擁有該互斥體的線程在釋放互斥體的所有權之前已終止。 (只有一個互斥體可以被放棄;臨界區和信號量不會像互斥體對象那樣具有線程相似性。)如果發生這種情況,您仍然會被授予互斥體的所有權,但是您不能真正相信互斥體應該保護的數據,因爲先前的所有者可能沒有在事情終止之前將事物保持在穩定的狀態。
如果您正確調用函數並檢查錯誤,則多線程無法同時進入關鍵部分。這是同步對象的全部目的。
爲什麼使用一個難以使用的互斥體,當您可以使用一個容易且快速的臨界截面時,速度較慢? – 2011-02-27 09:33:24
昨天你不是問過一個非常類似的問題嗎?我給了你關於關鍵部分的答案。你一定需要使用互斥鎖嗎?如果是這樣,我會停止接受! – 2011-02-27 09:35:56
你爲什麼要創建* named * mutex?獲得AV不需要線程錯誤,只是一個簡單的指針錯誤。 – 2011-02-27 10:34:21