オブジェクトの状態
条件変数オブジェクト
条件変数は、ファイバー間で共有されるグローバル変数を同期に使用する仕組みで、主に 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
21var 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
2ready
go
相続関係
コンストラクタ
Condition
条件変数コンストラクター (条件変数に必要なロックは fibjs によって内部的に構築されます)
1new Condition();
条件変数コンストラクター
1new Condition(Lock lock);
呼び出しパラメータ:
- lock:Lock、自己構築されたロックを使用する
メンバー関数
wait
条件変数を待つ
1Boolean Condition.wait(Integer timeout = -1);
呼び出しパラメータ:
- timeout: 整数。タイムアウトをミリ秒単位で指定します。デフォルトは -1 で、タイムアウトしないことを意味します。
返される結果:
- Boolean、取得が成功した場合は true を返し、タイムアウトした場合は false を返します。
notify
ブロックされたファイバー (ファイバー プールに最後に追加されたファイバー) に通知して、下方向に実行を続行します。
1Condition.notify();
notifyAll
ブロックされたすべてのファイバーに下方向への実行を続行するように通知します。
1Condition.notifyAll();
acquire
ロックの所有権を取得する
1Boolean Condition.acquire(Boolean blocking = true);
呼び出しパラメータ:
- blocking: ブール値、待機するかどうかを指定します。true の場合は待機します。デフォルトは true
返される結果:
- Boolean、ロックが正常に取得されたかどうかを返します。true は取得が成功したことを示します。
取得メソッドは、ロックの所有権を取得するために使用され、ロックが取得可能な状態にある場合、このメソッドはすぐに true を返します。
ロックが取得できず、ブロッキングが true の場合、現在のファイバーはスリープ状態になり、他のファイバーがロックを解放すると、このメソッドは true を返します。
ロックを取得できず、ブロッキングが false の場合、メソッドは false を返します。
release
ロックの所有権を解放する
1Condition.release();
このメソッドはロックの所有権を解放するか、現在のファイバーがロックを所有していない場合はエラーをスローします。
count
現在待機中のタスクの数を問い合わせる
1Integer Condition.count();
返される結果:
- Integer、タスクの数を返します
toString
オブジェクトの文字列表現を返します。通常、「[Native Object]」が返されます。オブジェクトは、独自の特性に従って再実装できます。
1String Condition.toString();
返される結果:
- String、オブジェクトの文字列表現を返します。
toJSON
オブジェクトの JSON 形式表現を返します。通常は、オブジェクトによって定義された読み取り可能なプロパティのコレクションを返します。
1Value Condition.toJSON(String key = "");
呼び出しパラメータ:
- key: 文字列、使用されません
返される結果:
- Value、シリアル化可能な JSON を含む値を返します