Object 內置對象

對象Condition

條件變量對象

條件變量是利用纖程間共享的全局變量來進行同步的一種機制,主要包括兩個動作: 1)一個線程等待某個條件成立,而將自己掛起; 2)另一個線程使條件成立,並通知等待的纖程向下執行。

為了防止競爭,每個條件變量都需要一個Lock的配合(Lock可自行顯式創建並傳遞進來,也可交由fibjs為您創建)

通過使用條件變量,可以利用一個條件變量控制一批纖程的開關;

以下是兩個纖程調度的實例:

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);

will output:

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: Boolean, 指定是否等待,為true 時等待,缺省為真

返回結果:

  • Boolean, 返回是否成功獲取鎖,為true 表示成功獲取

acquire 方法用於獲取鎖的擁有權,當鎖處於可獲取狀態時,此方法立即返回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: String, 未使用

返回結果:

  • Value, 返回包含可JSON 序列化的值