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

オブジェクト条件

条件変数オブジェクト

条件変数は、ファイバー間で共有されるグローバル変数を使用して同期を行うためのメカニズムであり、主に 1) あるスレッドが特定の条件が満たされるのを待って一時停止する、2) 別のスレッドが条件を満たし、待機しているスレッドに通知する、という 2 つのアクションが含まれます。ダウンを実行する繊維。

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

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

次に、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 を返します。

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