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

オブジェクトの状態

条件変数オブジェクト

条件変数は、ファイバー間で共有されるグローバル変数を使用して同期するメカニズムであり、主に2つのアクションが含まれます: 1) あるスレッドが特定の条件が成立するのを待ってそれ自体を中断する; 2) 別のスレッドが条件を成立させる、および通知下向きに実行するために待機しているファイバー。

競合を防ぐために、各条件変数には 1 つが必要です。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

継承

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Condition|new Condition()|wait();notify();notifyAll()] [object] <:- [Lock] [Lock] <:- [Condition] Lock new Lock() acquire() release() count() Condition new Condition() wait() notify() notifyAll() object toString() toJSON()

コンストラクタ

Condition

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

1
new Condition();

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

1
new Condition(Lock lock);

呼び出しパラメータ:

  • lock: Lock、自作ロックを使用

メンバー関数

wait

ファイバーをブロッキング状態にする

1
Condition.wait();

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

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

1
String Condition.toString();

結果を返す:

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

toJSON

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

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

呼び出しパラメータ:

  • key: ストリング、未使用

結果を返す:

  • Value、シリアライズ可能なJSONを含む値を返します