C++でセマフォを解放する方法

C++のReleaseSemaphore関数は、1つまたは複数のセマフォを解放するために使用されます。

BOOL ReleaseSemaphore(
  HANDLE hSemaphore,  // 信号量的句柄
  LONG   lReleaseCount,  // 释放的信号量计数
  LPLONG lpPreviousCount  // 指向先前的信号量计数的指针
);

パラメータの説明:

  1. hSemaphore: 開放するセマフォのハンドル。
  2. ReleaseCount:解放されるセマフォカウント数を指定します。解放されると、セマフォカウントはこの値だけ増加します。このセマフォを待機中のスレッドがあれば、待機していたスレッドがアクティブ化されます。
  3. 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や用途によって異なる可能性があることに注意して、各環境に合わせてお使いください。

bannerAds