オブジェクト条件
条件変数オブジェクト
条件変数は、ファイバー間で共有されるグローバル変数を使用して同期を行うためのメカニズムであり、主に 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
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
ファイバーをブロッキング状態にする
1Condition.wait();
notify
ブロックされたファイバー (最後にファイバー プールに追加されたファイバー) に通知して、実行を下向きに続行する
1Condition.notify();
notifyAll
ブロックされたすべてのファイバーを停止し続けるように通知します
1Condition.notifyAll();
acquire
ロックの所有権を取得する
1Boolean Condition.acquire(Boolean blocking = true);
呼び出しパラメーター:
- blocking: ブール値、待機するかどうかを指定、true の場合は待機、デフォルトは true
返される結果:
- Boolean、ロックが正常に取得されたかどうかを返します。 true は取得の成功を意味します
取得メソッドは、ロックの所有権を取得するために使用され、ロックが取得可能な状態にある場合、このメソッドはすぐに true を返します。
ロックを取得できず、blocking が true の場合、現在のファイバーはスリープ状態になり、他のファイバーがロックを解除すると、このメソッドは true を返します。
ロックを取得できず、blocking が 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 を含む値を返します