Class

NSCondition

A condition variable whose semantics follow those used for POSIX-style conditions. ある条件変数、それの持つ意味論はPOSIX形式条件に使われるものに従います。

Declaration 宣言

class NSCondition : NSObject

Overview 概要

A condition object acts as both a lock and a checkpoint in a given thread. The lock protects your code while it tests the condition and performs the task triggered by the condition. The checkpoint behavior requires that the condition be true before the thread proceeds with its task. While the condition is not true, the thread blocks. It remains blocked until another thread signals the condition object. ある条件オブジェクトは、与えられたスレッドにおいてロックとチェックポイントの両方として振舞います。ロックはあなたのコードをそれが条件をテストしている間保護します、そして条件によって誘発される作業を実行します。チェックポイント挙動は、条件が真であることをスレッドがその作業に進み出す前に要求します。条件が真でない間は、スレッドは封鎖されます。別のスレッドが条件オブジェクトを合図するまで、それはブロックされたままです。

The semantics for using an NSCondition object are as follows: NSConditionオブジェクトを使うための意味論は次の通りです:

  1. Lock the condition object. 条件オブジェクトをロックします。

  2. Test a boolean predicate. (This predicate is a boolean flag or other variable in your code that indicates whether it is safe to perform the task protected by the condition.) あるブール述部をテストします。(この述部は、あるブールフラグまたはあなたのコード中の他の変数で、それはその条件によって保護されるタスクの実行が安全かどうかを指し示します。)

  3. If the boolean predicate is false, call the condition object’s wait() or wait(until:) method to block the thread. Upon returning from these methods, go to step 2 to retest your boolean predicate. (Continue waiting and retesting the predicate until it is true.) ブール述部がfalseならば、条件オブジェクトの持つwait()またはwait(until:)メソッドを呼び出して、そのスレッドをブロックします。これらのメソッドからの復帰においては、段階2へと行ってあなたのブール述部を再テストしてください。(それがtrueになるまで述部の待機および再テストを継続してください。)

  4. If the boolean predicate is true, perform the task. ブール述部がtrueならば、タスクを実行してください。

  5. Optionally update any predicates (or signal any conditions) affected by your task. 任意に、あなたのタスクによって影響を受けるあらゆる述部を更新(またはあらゆる条件を合図)してください。

  6. When your task is done, unlock the condition object. あなたのタスクが終わった時に、条件オブジェクトをアンロックしてください。

The pseudocode for performing the preceding steps would therefore look something like the following: 先行する段階を実行するための疑似コードは、それゆえに以下のようなものに見えるでしょう:


lock the condition
while (!(boolean_predicate)) {
    wait on condition
}
do protected work
(optionally, signal or broadcast the condition again or change a predicate value)
unlock the condition

Whenever you use a condition object, the first step is to lock the condition. Locking the condition ensures that your predicate and task code are protected from interference by other threads using the same condition. Once you have completed your task, you can set other predicates or signal other conditions based on the needs of your code. You should always set predicates and signal conditions while holding the condition object’s lock. あなたが条件オブジェクトを使う時はいつでも、最初の段階はその条件をロックすることになります。条件をロックすることは、あなたの述部とタスクコードが同じ条件を使っている他のスレッドによる干渉から保護されることを保証します。一旦あなたがあなたのタスクを完了してしまったならば、あなたは、あなたのコードの必要に基づいて、他の述部を設定または他の条件を合図できます。あなたは、条件オブジェクトのロックを保有する間は、常に述部を設定及び条件を合図するべきです。

When a thread waits on a condition, the condition object unlocks its lock and blocks the thread. When the condition is signaled, the system wakes up the thread. The condition object then reacquires its lock before returning from the wait() or wait(until:) method. Thus, from the point of view of the thread, it is as if it always held the lock. スレッドがある条件に関して待機する場合、その条件オブジェクトは、それのロックをアンロックして、スレッドをブロックします。条件が合図される場合、システムはそのスレッドを起こします。条件オブジェクトはそれから、wait()またはwait(until:)メソッドからの復帰の前に、それのロックを再獲得します。それゆえに、スレッドの観点からは、あたかもそれが常にロックを保持されるかのようです。

A boolean predicate is an important part of the semantics of using conditions because of the way signaling works. Signaling a condition does not guarantee that the condition itself is true. There are timing issues involved in signaling that may cause false signals to appear. Using a predicate ensures that these spurious signals do not cause you to perform work before it is safe to do so. The predicate itself is simply a flag or other variable in your code that you test in order to acquire a Boolean result. ブール述部は、条件使用の意味論の重要な部分です、なぜなら作業を合図する方法のために。ある条件を合図することは、その条件自体がtrueであることを保証しません。合図に関わるタイミング問題が存在し、それはfalse合図が現れる原因になるかもしれません。ある述部を使うことは、それら見せかけの合図があなたに作業の実行をそうするのに安全である前にさせる原因にならないよう保証します。述部それ自体は、あなたのコードにおける単なるフラグまたは他の変数です、それはあなたがブール結果を獲得するためにテストするものです。

For more information on how to use conditions, see Using POSIX Thread Locks in Threading Programming Guide. 条件を使うことに関するさらなる情報として、Using POSIX Thread Locks を Threading Programming Guideで見てください。

Topics 話題

Waiting for the Lock ロックに対して待機する

Signaling Waiting Threads スレッドの待機を合図する

Identifying the Condition 条件を識別する

Relationships 関係

Inherits From 継承元

Conforms To 次に準拠

See Also 参照

Threads and Locking スレッドとロック