オブジェクト組み込みオブジェクト

オブジェクト条件

条件変数オブジェクト

条件変数とは、ファイバー間で共有されるグローバル変数を用いて同期を行う仕組みで、主に 1) スレッドがある条件が成立するのを待ってサスペンドする、2) 別のスレッドが条件を真にして通知する、という 2 つのアクションがあります。待機中のファイバーが下向きに実行されます。

競合状態を防ぐために、各条件変数にはLock協力(Lock自分で明示的に作成して渡すことも、fibjs に作成させることもできます)

条件変数を使用すると、1 つの条件変数を使用してファイバーのバッチの切り替えを制御できます。

次に、ファイバー スケジューリングの 2 つの例を示します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var coroutine = require("coroutine"); var cond = new coroutine.Condition(); var ready = false; var state = "ready"; function funcwait() { cond.acquire(); while (!ready) cond.wait(); state = "go" cond.release(); } coroutine.start(funcwait); cond.acquire(); console.log(state) ready = true; cond.notify(); coroutine.sleep(); console.log(state);

出力します:

1 2
ready go

相続関係

コンストラクタ

Condition

条件変数コンストラクター (条件変数に必要なロックは fibjs によって内部的に構築されます)

1
new Condition();

条件変数コンストラクター

1
new Condition(Lock lock);

呼び出しパラメーター:

  • lock:Lock、自己構築されたロックを使用

メンバー関数

wait

条件変数を待つ

1
Boolean Condition.wait(Integer timeout = -1);

呼び出しパラメーター:

  • timeout: 整数。ミリ秒単位でタイムアウト時間を指定します。デフォルトは -1 で、タイムアウトしないことを意味します。

戻り値:

  • Boolean、取得が成功した場合は true を返し、タイムアウトの場合は false を返します

notify

ブロックされたファイバー (最後にファイバー プールに参加) に通知して、実行を下向きに続行する

1
Condition.notify();

notifyAll

ブロックされたすべてのファイバーに下向きの実行を継続するよう通知する

1
Condition.notifyAll();

acquire

ロックの所有権を取得する

1
Boolean Condition.acquire(Boolean blocking = true);

呼び出しパラメーター:

  • blocking: ブール値、待機するかどうかを指定、true の場合は待機、デフォルトは true

戻り値:

  • Boolean、ロックが正常に取得されたかどうかを返します。 true は、ロックが正常に取得されたことを意味します

acquire メソッドはロックの所有権を取得するために使用され、このメソッドはロックが取得可能な状態になるとすぐに true を返します。

ロックを取得できず、blocking が true の場合、現在のファイバーは休止状態に入り、他のファイバーがロックを解除すると、このメソッドは true を返します。

ロックが利用できず、blocking が false の場合、メソッドは false を返します。


release

ロック所有権の解放

1
Condition.release();

このメソッドは、ロックの所有権を解放するか、現在のファイバーがロックを所有していない場合はエラーをスローします。


count

現在待機中のタスク数を問い合わせる

1
Integer Condition.count();

戻り値:

  • Integer、タスクの数を返します

toString

オブジェクトの文字列表現を返します。通常は「[Native Object]」を返します。オブジェクトは独自の特性に従って再実装できます

1
String Condition.toString();

戻り値:

  • String、オブジェクトの文字列表現を返します

toJSON

オブジェクトの JSON 形式表現を返します。通常は、オブジェクトによって定義された読み取り可能なプロパティのコレクションを返します。

1
Value Condition.toJSON(String key = "");

呼び出しパラメーター:

  • key: 文字列、未使用

戻り値:

  • Value、JSON シリアル化可能な値を返します