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

オブジェクトセマフォ

ファイバーセマフォオブジェクト

セマフォ オブジェクトは内部カウンタを管理します。このカウンタは、acquire または wait を呼び出すと 1 減少し、release または post を呼び出すと 1 増加します。値が 0 であることがわかると、他のファイバーがリリースまたはポストを通じてカウンターの値を増やすまで、取得と待機が現在のファイバーをスリープ状態にするため、カウンターは負の数に減少しません。

セマフォの一般的な状況は、リソースの同時使用と生産者/消費者モデルの適用を制限することです。

リソースの同時使用を制限する例としてデータベース リクエストを取り上げます。

1 2 3 4 5 6 7 8 9 10
var maxconnections = 5; var l = new coroutine.Semaphore(maxconnections); ...... l.acquire(); var conn = connectdb() ..... conn.close(); l.release();

生産者/消費者モデルは通常、キューと組み合わせてセマフォを使用します。プロデューサーはデータをキューに追加してシグナルを送信し、コンシューマーは最初にシグナルを待機し、シグナルを取得してから、データをクエリおよびフェッチするためにキューに移動します。

継承

#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>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

コンストラクタ

Semaphore

セマフォコンストラクタ

1
new Semaphore(Integer value = 1);

呼び出しパラメータ:

  • value: 整数、カウンターの初期値

メンバー関数

wait

セマフォを待機しています。acquire(true) と同等です。

1
Semaphore.wait();

post

release() と同等のセマフォを解放します。

1
Semaphore.post();

trywait

シグナルの取得を試み、取得できない場合はすぐに戻り、acquire(false) と同等の false を返す

1
Boolean Semaphore.trywait();

結果を返す:

  • Boolean、取得に成功したらtrueを返す

acquire

ロックの所有権を取得する

1
Boolean Semaphore.acquire(Boolean blocking = true);

呼び出しパラメータ:

  • blocking: ブール値、待機するかどうかを指定します。true の場合、待機します。デフォルトは true です。

結果を返す:

  • Boolean、ロックが正常に取得されたかどうかを返します。true は、取得が成功したことを意味します

取得メソッドは、ロックの所有権を取得するために使用され、ロックが取得可能な状態にある場合、このメソッドはすぐにtrueを返します。

ロックが利用できず、ブロッキングが true の場合、現在のファイバーはスリープ状態になり、他のファイバーがロックを解除すると、このメソッドは true を返します。

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


release

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

1
Semaphore.release();

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


count

現在待機中のタスク数を問い合わせる

1
Integer Semaphore.count();

結果を返す:

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

toString

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

1
String Semaphore.toString();

結果を返す:

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

toJSON

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

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

呼び出しパラメータ:

  • key: ストリング、未使用

結果を返す:

  • Value、シリアライズ可能なJSONを含む値を返します