2011-08-31 143 views
4

使用WaitForSingleObject函數。互斥鎖是否需要釋放,如果它超時?

如果該函數被調用並超時,它是否仍然需要釋放互斥鎖?

即應該ReleaseMutex在位置1.2.如果五秒鐘過去了?

WaitForSingleObject(5 second time out) 
{ 
    //access shared resource 

    //1. - ReleaseMutex() here? 
} 
    //2. - ReleaseMutex() here? 
+3

如果你從未獲得它,爲什麼你需要釋放它? – Duck

+2

我不知道它是如何工作的,這就是爲什麼我問;) –

回答

6

不,如果電話WaitForSingleObject超時,那麼你還沒有獲得互斥量,所以不應該釋放它。

即你只需要ReleaseMutex在位置1

2

你的情況下,#1是正確的。如果您在該通話中超時,則意味着該資源未被獲取,您不應該嘗試釋放該資源。

2

如果您擁有所有權,您只需要釋放互斥鎖。請注意,有4個可能的返回值,其中2個獲得所有權,2個則沒有。

WAIT_ABANDONED - 您擁有所有權並需要釋放互斥鎖,但前一個所有者因沒有明確釋放互斥鎖而終止,因此共享狀態可能不一致。

WAIT_OBJECT_0 - 您已獲得所有權。你需要釋放mutext。

WAIT_TIMEOUT - 在mutext,警方沒有公佈超時

WAIT_FAILED的時間 - 通常是由於你的代碼中的錯誤(即無效的句柄)。