0

「iOS スレッディング プログラミング ガイド」を読んでいるときに、「条件の使用」セクションのサンプル コードに戸惑いました。

NSCondition クラスの使用方法を示すために使用されているリスト 4-3リスト 4-4を見てください。スレッドが 4-3 を使用して条件の待機を開始すると、2 番目のスレッドが 4-4 を使用して条件を通知しようとします。条件は最初のスレッドによってロックされているため、2 番目のスレッドが条件を通知する可能性はありますか? そうでない場合は、デッドロックのようなものではありませんか?

これがばかげた質問である場合は、私を許してください:-)

Cocoa 条件の使用方法について Apple が提供するサンプルを次に示します。

コード リスト 4-3 Cocoa 条件の使用

[cocoaCondition lock];
while (timeToDoWork <= 0)
    [cocoaCondition wait];
timeToDoWork--;
// Do real work here.

[cocoaCondition unlock];

コード リスト 4-4 Cocoa の状態を通知する

[cocoaCondition lock];
timeToDoWork++;
[cocoaCondition signal];
[cocoaCondition unlock];
4

1 に答える 1

1

最初のスレッドが wait を呼び出すと、ロックの同期が放棄されます。2 番目のスレッドがシグナルを呼び出すと、最初のスレッドが復帰し、2 番目のスレッドがロックを解除したときに再開されます。その時点で、最初のスレッドはロックの同期を回復し、安全に続行できます。

于 2012-06-19T20:41:08.070 に答える