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

オブジェクトセマフォ

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

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

セマフォを待つ

1
Boolean Semaphore.wait(Integer timeout = -1);

呼び出しパラメータ:

  • timeout: 整数。タイムアウトをミリ秒単位で指定します。デフォルトは -1 で、タイムアウトしないことを意味します。

返される結果:

  • Boolean、取得が成功した場合は true を返し、タイムアウトした場合は false を返します。

post

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

1
Semaphore.post();

trywait

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

1
Boolean Semaphore.trywait();

返される結果:

  • Boolean、取得が成功した場合は true を返し、タイムアウトした場合は false を返します。

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

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

1
String Semaphore.toString();

返される結果:

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

toJSON

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

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

呼び出しパラメータ:

  • key: 文字列、使用されません

返される結果:

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