正确使用NSCondition

时间:2012-08-02 15:37:25

标签: objective-c cocoa synchronization

我正在查看NSCondition documentation示例,并有点困惑:


  

无论何时使用条件对象,第一步都是锁定   条件。锁定条件可确保您的谓词和任务   使用相同的代码保护代码免受其他线程的干扰   条件。完成任务后,您可以设置其他任务   根据代码的需要预测或发出其他信号。   您应始终在保持时设置谓词和信号条件   条件对象的锁定。

清单4-3使用Cocoa条件

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

timeToDoWork--;

// Do real work here.

[cocoaCondition unlock];

清单4-4发出Cocoa条件信号

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

假设使用Cocoa条件的线程在[cocoaCondition wait]处阻塞。由于尚未调用[cocoaCondition unlock],因此它还拥有cocoaCondition锁的所有权。

我的问题是 - 病情是如何发出信号的?一旦另一个线程试图获取cocoaCondition锁定,它不会阻止吗?

1 个答案:

答案 0 :(得分:4)

这是条件如何工作的一部分:wait一个条件变量在等待操作的持续时间内原子地释放底层锁,并在条件变量发出信号后重新获取它。同样,signal传递将不会发生,直到发出变量信号的线程释放变量的底层锁。