Skip to content

Latest commit

 

History

History
80 lines (58 loc) · 1.9 KB

File metadata and controls

80 lines (58 loc) · 1.9 KB

release

  • semaphore[meta header]
  • std[meta namespace]
  • counting_semaphore[meta class]
  • function[meta id-type]
  • cpp20[meta cpp]
void release(ptrdiff_t update = 1);
  • ptrdiff_t[link /reference/cstddef/ptrdiff_t.md]

概要

カウンティングセマフォのカウンタ値にupdateを加算し、待機中スレッドのブロック解除を行う。

説明のため、ここではカウンタ値をcounterと表記する。

事前条件

update >= 0 かつ update <= max() - counter

効果

アトミックにcounter += updateを実行し、counterが値0より大きくなるまで待機中のスレッド群をブロック解除する。

戻り値

なし

例外

この関数は、以下のerror conditionを持つsystem_error例外オブジェクトを送出する可能性がある:

#include <iostream>
#include <semaphore>
#include <thread>

int main()
{
  int shared_data = 0;
  std::counting_semaphore sem{0};

  std::thread t([&]{
    // 通知を待機し、共有データから読取り
    sem.acquire();
    std::cout << shared_data << std::endl;
  });

  // 共有データへ書込み、通知を行う
  shared_data = 42;
  sem.release();

  t.join();
}
  • release()[color ff0000]
  • acquire()[link acquire.md]

出力

42

バージョン

言語

  • C++20

処理系