セマフォオブジェクトを用いた排他制御の例(C言語)

キーワード:

CreateSemaphore, WaitForSingleObject, Sleep, ReleaseSemaphore, CloseHandle

サンプルコード:

#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 更新)

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