NSCondition - 多线程

时间:2012-07-16 12:44:45

标签: ios multithreading thread-safety semaphore nscondition

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

方法1:

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

// Do real work here.

[cocoaCondition unlock];

方法2:

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

所有我想要的是使用一个可以从不同线程锁定和解锁的简单锁,所以我明白我需要使用NSCondition,而苹果医生说检查条件是特别谨慎甚至如果你不逻辑地使用它(来自apple doc:“为了避免这些虚假信号引起的问题,你应该总是将谓词与条件锁一起使用”)。

方法之间存在依赖关系,但它有两种方式,这意味着在另一种方法释放锁定之前,没有人可以完成自己的工作(可能会在从主体发送的第三个线程上释放锁定锁定它的方法的工作。)

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

  2. 如果我有3个thread1线程同时等待,它们会以什么顺序进入工作主体?我猜这是他们进入等待的顺序,我是否正确?

1 个答案:

答案 0 :(得分:0)

首先,您的代码可以在此处发布另一篇文章How does the NSCondition work?

其次,不要打电话

 //[cocoaCondition wait];

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