ReleaseSemaphore セマフォオブジェクトの内部カウンタの増加

Cの宣言:

BOOL ReleaseSemaphore(
	HANDLE hSemaphore,
	LONG ReleaseCount,
	LPLONG PrevCount);

説明:

セマフォオブジェクトの内部カウンタを増加する。

内部カウンタは、カウンタの最大値を超えて増加させることはできない。最大値を超えて増加させようとした場合、エラーが発生する。

引数の意味は、次の通り。
hSemaphore (IN) 内部カウンタを増加させるセマフォオブジェクトを示すハンドル
ReleaseCount (IN) 増加数。
PrevCount (OUT) 増加させる前の値を格納する変数へのポインタ。NULLが指定された場合、この引数は無視される。

戻り値は、内部カウンタの増加に成功したか否かを表す真偽値である。

C言語のサンプル:

#define SEMAPHORE_NAME "Test Semaphore Object"
 
/* アプリケーションを1度に3つまでしか実行できないようにする */
int main()
{
	HANDLE hSemaphore;
	DWORD result;

	/* セマフォオブジェクトの作成/取得 */
	hSemaphore = CreateSemaphore(NULL, 3, 3, SEMAPHORE_NAME);
	result = WaitForSingleObject(hSemaphore, 0);

	/* すでに3つ開いているかどうか判定 */
	if(result != WAIT_OBJECT_0) {
		printf("既に3つ開いている\n");
	} else {
		/* 処理 */
		printf("処理開始\n");
		Sleep(10000);
		printf("処理終了\n");

		/* 解放 */
		ReleaseSemaphore(hSemaphore, 1, NULL);
	}

	CloseHandle(hSemaphore);
	return(0);
}

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。