2

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

4

1 回答 1

4

这是条件工作原理的一部分:wait在条件变量上执行操作会在等待操作期间自动释放底层锁,并在条件变量发出信号后重新获取它。同样,在signal发出变量信号的线程释放变量的底层锁之前,不会发生传递。

于 2012-08-02T16:10:22.927 回答