最終更新日時(UTC): 2024年06月11日 13時45分38秒
Akira Takahashi が更新

履歴 編集

function
<latch>

# std::latch::wait(C++20)

    void wait() const;

## 概要

ラッチのカウンタ値が`0`になるまで待機する。

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

## 効果

`counter`が`0`に等しければ即座に制御を戻す。 そうでなければ、`counter`を`0`に減算する`count_down`呼び出しが行われるまで、`*this`上で呼び出しスレッドをブロックする。

## 戻り値

なし

## 例外

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

- `resource_unavailable_try_again` : 操作対象のネイティブハンドル型が無効
- `operation_not_permitted` : スレッドにこの操作を行う権限がない
- `invalid_argument` : 実引数が無効

## 例

    #include <iostream>
    #include <latch>
    #include <thread>

    int main()
    {
      int shared_data = 0;
      std::latch stored{1};

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

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

      t.join();
    }

### 出力

    42

## バージョン

### 言語

- C++20

### 処理系

- Clang: 11.0 ✅
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `count_down()`
- `arrive_and_wait()`