2012-08-02 54 views
2

我一直在尋找在NSCondition documentation例子,有一個小困惑:使用NSCondition正確


當你使用一個條件對象,第一步是鎖定 條件。鎖定條件確保您的謂詞和任務 代碼干擾使用同一 條件的其他線程的保護。完成任務後,您可以根據代碼的需要設置其他 謂詞或指示其他條件。 您應該始終設置謂詞和信號條件,同時按住條件對象鎖定的 。

清單4-3使用可可條件

[cocoaCondition lock]; 
while (timeToDoWork <= 0) 
    [cocoaCondition wait]; 

timeToDoWork--; 

// Do real work here. 

[cocoaCondition unlock]; 

清單4-4信令可可條件

[cocoaCondition lock]; 
timeToDoWork++; 
[cocoaCondition signal]; 
[cocoaCondition unlock]; 

比方說,使用Cocoa條件的線程阻塞[cocoaCondition wait]。由於[cocoaCondition unlock]尚未被調用,因此它也具有cocoaCondition鎖的所有權。

我的問題是 - 如何病情曾經得到的信號?一旦另一個線程試圖獲得鎖,不會阻塞嗎?

回答

4

這是條件如何工作的一部分:wait在條件變量被髮送信號後,基於條件變量自動釋放等待操作期間的底層鎖並重新獲取它。同樣,只有在發送變量的線程釋放變量的底層鎖之前,纔會發送遞送。