3

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 番目のスレッドで解放される可能性があります)。それをロックした方法)。

  1. 両方のメソッドから条件を待ち、両方の最後にそれを通知することは可能ですか?

  2. method1 の 3 つのスレッドが同時に待機している場合、それらはどのような順序で作業に入るでしょうか? ウェイティングに入った順番だと思いますが、正しいですか?

4

1 に答える 1