iphone - "iOS threading programming guide"中的条件样本

标签 iphone objective-c ios multithreading conditional-statements

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

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

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

以下是 Apple 提供的有关如何使用 Cocoa 条件的示例:

list 4-3 使用 Cocoa 条件

[cocoaCondition lock];
while (timeToDoWork <= 0)
    [cocoaCondition wait];
timeToDoWork--;
// Do real work here.

[cocoaCondition unlock];

list 4-4 发出 Cocoa 状况信号

[cocoaCondition lock];
timeToDoWork++;
[cocoaCondition signal];
[cocoaCondition unlock];

最佳答案

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

关于iphone - "iOS threading programming guide"中的条件样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107096/

相关文章:

iphone - 将特定符号从 json 转换为普通 utf-8

ios - 供应配置文件不包含在钥匙串(keychain)中安装匹配私钥的任何证书

ios - iPad 中单个 View Controller 中的多个 UICOLLECTION View

iphone - 我们可以从应用商店获得唯一的交易ID吗

objective-c - 滚动时通过 UIScrollView 的 subview 处理点击事件

ios - 自定义 TableView 单元格未配置

ios - Swift 中 super 简单的尾随闭包语法

iphone - ios循环异步请求

ios - 捕获对 "App would like to send you push notifications"警报的回答

iphone - 游戏因NSLog错误而崩溃(cocos2d iPhone)