パッケージ | flash.concurrent |
クラス | public final class Condition |
継承 | Condition Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.5, AIR 3.5 |
次に、Condition オブジェクトを使用するワークフローの例を示します。
- Condition オブジェクトを使用する前に、1 つ目のワーカーでその条件に関連付けられた mutex の所有権を取得する必要があります。そのためには、Mutex オブジェクトの
lock()
メソッドまたはtryLock()
メソッドを呼び出します。 - 条件の一部が false になるまで、ワーカーのコードで共有リソースに対する処理を実行します。条件が false になると、そのワーカーが共有リソースを使用してそれ以上の作業を行うことができなくなります。例えば、処理対象のデータセットが共有リソースである場合、処理すべきデータがなくなれば、ワーカーはそれ以上の作業を行うことができません。
- その時点で、Condition オブジェクトの
wait()
メソッドを呼び出してワーカーの実行を一時停止し、mutex の所有権を解放します。 - ある時点で、2 つ目のワーカーが mutex の所有権を取得します。mutex を取得できるので、2 つ目のワーカーのコードで共有リソースに対する処理を安全に実行できます。2 つ目のワーカーは、1 つ目のワーカーが作業を再開できる条件を満たすために必要となることをすべて実行します。例えば、1 つ目のワーカーが処理するデータがなくなった場合に、2 つ目のワーカーは処理対象の他のデータを共有リソースに渡すことができます。
- その時点で、1 つ目のワーカーの作業に関連する条件が満たされます。そのため、条件が満たされたことを 1 つ目のワーカーに通知する必要があります。1 つ目のワーカーに通知するには、2 つ目のワーカーのコードで Condition オブジェクトの
notify()
メソッドまたはnotifyAll()
メソッドを呼び出します。 -
notify()
の呼び出しに加えて、2 つ目のワーカーでは mutex の所有権を解放する必要があります。そのためには、Mutex オブジェクトのunlock()
メソッドを呼び出すか、Condition オブジェクトのwait()
メソッドを呼び出します。1 つ目のワーカーがwait()
メソッドを呼び出したので、mutex の所有権は 1 つ目のワーカーに戻ります。その後、1 つ目のワーカーでは、wait()
呼び出しの次のコード行より、コードの実行が再開されます。
Condition クラスは特別なオブジェクトタイプの 1 つで、ワーカー間でコピーされるのではなく、共有されます。Worker オブジェクトの setSharedProperty()
メソッドを呼び出すか、または MessageChannel オブジェクトを使用して、あるワーカーから別のワーカーに条件を渡す場合、両方のワーカーは、ランタイムのメモリの同じ Condition オブジェクトを参照します。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
isSupported : Boolean [静的] [読み取り専用]
Condition クラスが現在のプラットフォームでサポートされるかどうかを示します。 | Condition | ||
mutex : Mutex [読み取り専用]
この条件に関連付けられている mutex。 | Condition |
メソッド | 定義元 | ||
---|---|---|---|
新しい Condition インスタンスを作成します。 | Condition | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
この Condition オブジェクトが表す条件が満たされていること、およびこの条件について待機している次のワーカーが存在する場合にそのワーカーに mutex の所有権を返すことを示します。 | Condition | ||
この Condition オブジェクトが表す条件が満たされていること、およびこの条件について待機しているすべてのワーカーに mutex の所有権が返されることを示します。 | Condition | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object | ||
この Condition オブジェクトが表す条件が満たされておらず、現在のワーカーが残りのコードを実行するには、条件が満たされるまで待機する必要があることを示します。 | Condition |
isSupported | プロパティ |
mutex | プロパティ |
Condition | () | コンストラクター |
notify | () | メソッド |
public function notify():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.5, AIR 3.5 |
この Condition オブジェクトが表す条件が満たされていること、およびこの条件について待機している次のワーカーが存在する場合にそのワーカーに mutex の所有権を返すことを示します。
このメソッドを呼び出しても mutex の所有権は自動的に解放されません。notify()
を呼び出した後に、次の 2 つのうちいずれかの方法で mutex の所有権を明示的に解放する必要があります。現在のワーカーでその mutex を再度必要としない場合は、Mutex.unlock()
メソッドを呼び出します。または、現在のワーカーで、他のワーカーが作業を完了した後にその mutex の所有権を再度取得する必要がある場合は、wait()
を呼び出します。
mutex のロックが解放されると、wait()
メソッドを呼び出したワーカーのキュー内にある次のワーカーがその mutex を取得し、コードの実行を再開します。
例外
IllegalOperationError — 現在のワーカーがこの条件の mutex を所有していない場合
|
notifyAll | () | メソッド |
public function notifyAll():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.5, AIR 3.5 |
この Condition オブジェクトが表す条件が満たされていること、およびこの条件について待機しているすべてのワーカーに mutex の所有権が返されることを示します。
このメソッドを呼び出しても mutex の所有権は自動的に解放されません。notify()
を呼び出した後に、次の 2 つのうちいずれかの方法で mutex の所有権を明示的に解放する必要があります。現在のワーカーでその mutex を再度必要としない場合は、Mutex.unlock()
メソッドを呼び出します。または、現在のワーカーで、他のワーカーが作業を完了した後にその mutex の所有権を再度取得する必要がある場合は、wait()
を呼び出します。
mutex のロックが解放されると、待機中のワーカーは、wait()
メソッドの呼び出し順に従って 1 つずつ所有権を受け取ります。その後、wait()
メソッドを呼び出した各ワーカーは mutex を取得し、コードの実行を再開します。そのワーカーが Mutex.unlock()
メソッドまたは wait()
メソッドを呼び出すと、mutex の所有権が次の待機中のワーカーに切り替えられます。複数のワーカー間で mutex の所有権が切り替えられるたびに、移行が単一のアトミック操作として実行されます。
例外
IllegalOperationError — 現在のワーカーがこの条件の mutex を所有していない場合
|
wait | () | メソッド |
public function wait(timeout:Number = -1):Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.5, AIR 3.5 |
この Condition オブジェクトが表す条件が満たされておらず、現在のワーカーが残りのコードを実行するには、条件が満たされるまで待機する必要があることを示します。このメソッドを呼び出すと、現在のワーカーの実行スレッドが一時停止し、この条件の mutex の所有権が解放されます。これらの手順は、単一のアトミック操作として実行されます。ワーカーは、別のワーカーがこの Condition オブジェクトの notify()
メソッドまたは notifyAll()
メソッドを呼び出すまで一時停止します。
パラメーター
timeout:Number (default = -1 ) — ワーカーが処理を再開するまでに実行を一時停止すべき最大時間(ミリ秒単位)。この値が -1(デフォルト)の場合、タイムアウトは発生せず、実行の一時停止時間は無制限になります。
|
Boolean — timeout の時間が経過したという理由でメソッドが制御を返した場合は true です。それ以外の場合は、このメソッドは false を返します。
|
例外
IllegalOperationError — 現在のワーカーがこの条件の mutex を所有していない場合
| |
ArgumentError — timeout 引数が 0 未満かつ -1 以外の数値の場合
| |
ScriptTimeoutError — Flash Player で基本ワーカーのコードからメソッドが呼び出される場合、ワーカーがスクリプトのタイムアウト制限(デフォルトでは 15 秒)を超えて一時停止する場合
| |
Error — メソッドが呼び出され、呼び出し元のワーカーの実行が一時停止され、待機中のワーカーが終了された場合
|
Tue Jun 12 2018, 10:34 AM Z