我正在查看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
锁,它不会阻塞吗?