NSCondition のドキュメントの例を見ていて、少し混乱しました。
条件オブジェクトを使用するときはいつでも、最初のステップは条件をロックすることです。条件をロックすると、述語とタスク コードが、同じ条件を使用する他のスレッドによる干渉から保護されます。タスクが完了したら、コードのニーズに基づいて、他の述語を設定したり、他の条件を通知したりできます。条件オブジェクトのロックを保持している間は、常に述語とシグナル条件を設定する必要があります。
コード リスト 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];
Cocoa 条件を使用するスレッドが でブロックしているとしましょう[cocoaCondition wait]
。[cocoaCondition unlock]
はまだ呼び出されていないため、ロックの所有権も持っていますcocoaCondition
。
私の質問は、状態がどのように通知されるのですか? cocoaCondition
別のスレッドがロックを取得しようとすると、ブロックされませんか?