C++でセマフォを解放する方法
C++のReleaseSemaphore関数は、1つまたは複数のセマフォを解放するために使用されます。
BOOL ReleaseSemaphore(
HANDLE hSemaphore, // 信号量的句柄
LONG lReleaseCount, // 释放的信号量计数
LPLONG lpPreviousCount // 指向先前的信号量计数的指针
);
パラメータの説明:
- hSemaphore: 開放するセマフォのハンドル。
- ReleaseCount:解放されるセマフォカウント数を指定します。解放されると、セマフォカウントはこの値だけ増加します。このセマフォを待機中のスレッドがあれば、待機していたスレッドがアクティブ化されます。
- PreviousCount: 信号の前回のカウンタを格納する変数へのポインタ。この情報が不要な場合は NULL に設定できます。
ReleaseSemaphore関数は操作が成功したかどうかを示すBOOL値を返します。関数が成功した場合はTRUEを、関数が失敗した場合はFALSEを返します。
以下是一个使用ReleaseSemaphore函数的示例:
#include <iostream>
#include <Windows.h>
int main() {
HANDLE hSemaphore = CreateSemaphore(NULL, 0, 1, NULL);
if (hSemaphore == NULL) {
std::cout << "Failed to create semaphore" << std::endl;
return 1;
}
// 释放一个信号量
if (!ReleaseSemaphore(hSemaphore, 1, NULL)) {
std::cout << "Failed to release semaphore" << std::endl;
CloseHandle(hSemaphore);
return 1;
}
// 检查信号量计数
LONG previousCount;
if (!ReleaseSemaphore(hSemaphore, 0, &previousCount)) {
std::cout << "Failed to check semaphore count" << std::endl;
CloseHandle(hSemaphore);
return 1;
}
std::cout << "Previous semaphore count: " << previousCount << std::endl;
CloseHandle(hSemaphore);
return 0;
}
そのサンプルでは、まずCreateSemaphore関数を使用して初期カウントを0にしたセマフォを作成します。次に、ReleaseSemaphore関数を使用してセマフォを解放し、またReleaseSemaphore関数を使用してセマフォカウントをチェックし、これまでのカウント値を出力します。最後に、CloseHandle関数を使用してセマフォのハンドルのクローズを行います。
ReleaseSemaphore関数の使い方は、OSや用途によって異なる可能性があることに注意して、各環境に合わせてお使いください。