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

オブジェクトの状態

条件変数オブジェクト

条件変数は、ファイバー間で共有されるグローバル変数を同期に使用する仕組みで、主に 1) あるスレッドが条件が true になるのを待って自身を停止する、2) 別のスレッドが条件を true にして待機中のスレッドに通知する、という 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 は取得が成功したことを示します。

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

ロックが取得できず、ブロッキングが true の場合、現在のファイバーはスリープ状態になり、他のファイバーがロックを解放すると、このメソッドは true を返します。

ロックを取得できず、ブロッキングが 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 を含む値を返します