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

オブジェクトセマフォ

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

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

プロデューサー/コンシューマーモデルは通常、セマフォとキューを一緒に使用します。プロデューサーはデータをキューに追加してシグナルを送信し、コンシューマーは最初にシグナルを待機し、シグナルを取得してからキューに移動してデータを照会およびフェッチします。

継承

コンストラクタ

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を返します。

ロックが使用できず、ブロッキングが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を含む値を返します