2

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別のスレッドがロックを取得しようとすると、ブロックされませんか?

4

1 に答える 1

4

これは、条件が機能する方法の一部です。wait条件変数をオンにすると、待機操作の期間中、基になるロックがアトミックに解放され、条件変数が通知されると再取得されます。同様に、signal変数を通知するスレッドが変数の基になるロックを解放するまで、配信は行われません。

于 2012-08-02T16:10:22.927 に答える