我看了一下NSCondition文档的例子,有点困惑:
每当您使用条件对象时,第一步就是锁定条件。锁定条件确保您的谓词和任务代码不受使用相同条件的其他线程的干扰。完成任务后,可以根据代码的需要设置其他谓词或指示其他条件。在保持条件对象的锁时,应该始终设置谓词和信号条件。
清单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锁,它就不会阻塞吗?
发布于 2012-08-02 16:10:22
这是条件工作方式的一部分:条件变量上的wait在等待操作期间原子地释放底层锁,并在条件变量发出信号后重新获取它。同样,在发送变量信号的线程释放变量的基础锁之前,signal传递不会发生。
https://stackoverflow.com/questions/11781018
复制相似问题