【问题标题】:NSCondition - multiple threadsNSCondition - 多线程
【发布时间】:2012-07-16 12:44:45
【问题描述】:

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

【问题讨论】:

    标签: ios multithreading thread-safety semaphore nscondition


    【解决方案1】:

    首先,您的代码在How does the NSCondition work? 的另一个帖子之后运行良好。

    第二,不要打电话

     //[cocoaCondition wait];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多