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

オブジェクトの状態

条件変数オブジェクト

条件変数は、ファイバー間で共有されるグローバル変数を使用して同期するメカニズムです。主に2つのアクションが含まれます。1)スレッドは特定の条件が確立されるのを待ってそれ自体を一時停止します。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);

呼び出しパラメーター:

  • lockLock 、自己構築ロックを使用

メンバー機能

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

ロックが使用できず、ブロッキングがfalseの場合、メソッドはfalseを返します。


release

ロックの所有権を解放する

1
Condition.release();

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


count

待機中のタスクの現在の数を照会します

1
Integer Condition.count();

戻り結果:

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

toString

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

1
String Condition.toString();

戻り結果:

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

toJSON

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

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

呼び出しパラメーター:

  • key :文字列、未使用

戻り結果:

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