“iOS线程编程指南”中的条件示例

时间:2012-06-19 18:28:26

标签: iphone objective-c ios multithreading conditional-statements

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

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

1 个答案:

答案 0 :(得分:1)

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