0

在阅读“iOS 线程编程指南”时,我对“使用条件”部分中的示例代码感到困惑。

请看示例4-3和示例4-4,它们用于演示 NSCondition 类的使用。如果一个线程开始使用 4-3 等待条件,然后第二个线程尝试使用 4-4 发出条件信号。由于条件被第一个线程锁定,第二个线程是否有机会发出条件信号?如果不是,那不是死锁吗?

如果这是一个愚蠢的问题,请原谅我:-)

这是 Apple 提供的关于如何使用 Cocoa 条件的示例:

清单 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];
4

1 回答 1

1

当第一个线程调用 wait 时,它会放弃锁的同步。当第二个线程调用信号时,第一个线程可以唤醒并在第二个线程解锁其锁时恢复。那时,第一个线程重新获得了锁的同步,可以安全地继续进行。

于 2012-06-19T20:41:08.070 回答