3

我知道以下是您应该如何使用 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 个 method1 线程同时等待,它们将以什么顺序进入工作主体?我想这是他们进入等待的顺序,对吗?

4

1 回答 1

0

首先,您的代码在此处的另一篇文章之后运行良好NSCondition 是如何工作的?.

二、不要打电话

 //[cocoaCondition wait];

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

于 2017-02-13T04:52:09.480 回答