我知道以下是你应该如何使用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:“为了避免这些虚假信号引起的问题,你应该总是将谓词与条件锁一起使用”)。
方法之间存在依赖关系,但它有两种方式,这意味着在另一种方法释放锁定之前,没有人可以完成自己的工作(可能会在从主体发送的第三个线程上释放锁定锁定它的方法的工作。)
是否可以在两种方法的条件下等待并在两者结束时发出信号?
如果我有3个thread1线程同时等待,它们会以什么顺序进入工作主体?我猜这是他们进入等待的顺序,我是否正确?
答案 0 :(得分:0)
首先,您的代码可以在此处发布另一篇文章How does the NSCondition work?。
其次,不要打电话
//[cocoaCondition wait];
可能是您想要的,或者只使用NSXXLock。