2012-07-16 27 views
3

我知道下面是你應該如何使用NSCondition:NSCondition - 多線程

方法1:

[cocoaCondition lock]; 
while (someConditionIsTrue) 
    [cocoaCondition wait]; 

// Do real work here. 

[cocoaCondition unlock]; 

方法2:

[cocoaCondition lock]; 
timeToDoWork++; 
someConditionIsTrue = NO; 
[cocoaCondition signal]; 
[cocoaCondition unlock]; 

所有我想要的是使用一個簡單的鎖,可以從不同的線程鎖定和解鎖,所以我明白我需要使用NSCondition,並且蘋果文檔說檢查條件是需要額外的謹慎,即使你不要在邏輯上使用它(來自apple doc:「爲了避免由這些虛假信號引起的問題,您應該總是使用謂詞與條件鎖定結合使用)」。

這些方法之間存在依賴關係,但它有兩種方式,這意味着在另一個方法釋放鎖之前,沒有人可以完成它們的工作主體(這可能會在從主體派發的第三個線程上釋放鎖定它的方法的工作)。

  1. 是否有可能從這兩種方法等待條件並在兩者結束時發出信號?

  2. 如果我有3個線程的method1同時等待,他們將按什麼順序進入工作主體?我猜這是按照他們進入等待的順序,我是否正確?

回答

0

首先你的代碼在這裏的另一個帖子How does the NSCondition work?後效果很好。

其次,不叫

//[cocoaCondition wait]; 

,可能是你想要的,或者僅使用NSXXLock。