ReleaseSemaphore

指定したセマフォオブジェクトのカウントを指定した量だけ増加させる。

ReleaseSemaphore hSemaphore, lReleaseCount, lpPreviousCount

hSemaphore : [intptr] セマフォオブジェクトへのハンドル。CreateSemaphore または OpenSemaphore 関数がこのハンドルを返す。このハンドルは SEMAPHORE_MODIFY_STATE アクセス権を持つ必要がある。詳細は Synchronization Object Security and Access Rights を参照。
lReleaseCount : [int] セマフォオブジェクトの現在のカウントを増加させる量。値は 0 より大きくなければならない。指定された量によりセマフォのカウントがセマフォ作成時に指定された最大カウントを超える場合、カウントは変更されず関数は FALSE を返す。
lpPreviousCount : [var] セマフォの以前のカウントを受け取る変数へのポインタ。以前のカウントが不要な場合、このパラメータは NULL でもよい。

(プラグイン / モジュール : kernel32.dll)

解説

指定したセマフォオブジェクトのカウントを指定した量だけ増加させる。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 である。拡張エラー情報を取得するには
GetLastError を呼び出す。

[備考]
セマフォオブジェクトの状態はカウントが 0 より大きいときシグナル状態、0 のとき非シグナル状態である。CreateSemaphore
関数を呼び出すプロセスはセマフォの初期カウントを指定する。セマフォのシグナル状態により待機中スレッドが解放されるたびに、セマフォのカウントは
1
減少する。通常、アプリケーションはセマフォをリソースを使用するスレッド数を制限するために使用する。スレッドはリソースを使用する前に、待機関数の
1 つにセマフォハンドルを指定する。待機関数が戻るとき、セマフォのカウントを 1 減少させる。スレッドはリソースの使用を終えたときに
ReleaseSemaphore を呼び出してセマフォのカウントを 1 増加させる。ReleaseSemaphore のもう 1
つの用途はアプリケーションの初期化中である。アプリケーションは初期カウント 0
のセマフォを作成できる。これはセマフォの状態を非シグナルに設定し、全スレッドから保護対象リソースへのアクセスをブロックする。アプリケーションが初期化を完了した時点で、ReleaseSemaphore
を使用してカウントを最大値まで増加させ、保護対象リソースへの通常アクセスを許可する。lReleaseCount
は負数にできないため、ReleaseSemaphore
でセマフォオブジェクトのカウントを減らすことはできない。アクセスを一時的に制限または削減するには、セマフォカウントが十分に減少するまでタイムアウト間隔
0 で WaitForSingleObject
関数を呼び出すループを作成する(このループの実行中に他のスレッドがカウントを減らすことも可能である点に注意)。アクセスを元に戻すには、ループ内で
WaitForSingleObject が呼び出された回数に等しい解放カウントで ReleaseSemaphore を呼び出す。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs