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

オブジェクトセマフォ

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

セマフォオブジェクトは内部カウンタを管理します。内部カウンタは、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

取得(true)と同等のセマフォを待機しています

1
Semaphore.wait();

post

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

1
Semaphore.post();

trywait

信号を取得しようとします。取得できない場合は、すぐに戻り、falseを返します。これはacquire(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

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

1
String Semaphore.toString();

戻り結果:

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

toJSON

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

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

呼び出しパラメーター:

  • key:文字列、未使用

戻り結果:

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