ios - NSCondition - 多线程

标签 ios multithreading thread-safety semaphore nscondition

我知道以下是您应该如何使用 NSCondition:

方法一:

[cocoaCondition lock];
while (someConditionIsTrue)
    [cocoaCondition wait];

// Do real work here.

[cocoaCondition unlock];

方法二:

[cocoaCondition lock];
timeToDoWork++;
someConditionIsTrue = NO;
[cocoaCondition signal];
[cocoaCondition unlock];

我想要的只是使用一个简单的锁,可以从不同的线程锁定和解锁,所以我知道我需要为此使用 NSCondition,苹果文档说检查条件是为了格外小心,甚至如果您不合乎逻辑地使用它(来自苹果文档:“为了避免由这些虚假信号引起的问题,您应该始终将谓词与您的条件锁结合使用”)。

方法之间存在依赖关系,但在两种方式中都是如此,这意味着在另一个方法释放锁之前,没有人可以完成他们的工作主体(这可能会在从主体调度的第三个线程上释放锁定它的方法的工作)。

  1. 是否可以等待两种方法的条件并在两种方法结束时发出信号?

  2. 如果我有 3 个方法 1 线程同时等待,它们将以什么顺序进入工作主体?我猜这是按照他们进入等待的顺序,我是对的吗?

最佳答案

首先,您的代码在此处的另一篇文章之后运行良好 How does the NSCondition work? .

二、不打电话

 //[cocoaCondition wait];

这可能是您想要的,或者只使用 NSXXLock。

关于ios - NSCondition - 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504591/

相关文章:

ios - 将自定义 uiView 添加到 UITableViewCell imageView 属性

ios - 应用内购买已购买

java - 终止主线程而不确保终止由它生成的线程

scala - 我的 Scala Actor 的属性是否应该标记为@volatile?

macos - fprintf 线程在 OS X 上安全吗?

ios - TestFlight 构建和 ITC 分析

ios - 函数签名特化 <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed>

c - 为什么 sqlite 告诉我 "out of memory"?

java - 如果两个不同步的线程将计数器递增 X 次,总结果会小于 X 吗?

c++ - C++ 中的多线程示例