最終更新日時(UTC): 2024年12月23日 07時58分47秒
Akira Takahashi が更新

履歴 編集

function
<atomic>

# std::atomic_flag::test(C++20)

    bool
      test(memory_order order = memory_order::seq_cst
          ) const volatile noexcept;                  // (1) C++20

    bool
      test(memory_order order = memory_order::seq_cst
           ) const noexcept;                          // (2) C++20
    constexpr bool
      test(memory_order order = memory_order::seq_cst
           ) const noexcept;                          // (2) C++26

## 概要

現在の値を`bool`値として取得する。

## 要件

`order`が以下のメモリオーダーではないこと：

- `memory_order_release`
- `memory_order_acq_rel`

## 効果

`order`値によってメモリに影響がある

## 戻り値

アトミックに読み込まれた`*this`が指している値を返す

## 例外

投げない

## 例

    #include <iostream>
    #include <atomic>

    int main()
    {
      std::cout << std::boolalpha;

      std::atomic_flag x = ATOMIC_FLAG_INIT;
      std::cout << x.test() << std::endl;

      x.test_and_set();
      std::cout << x.test() << std::endl;
    }

### 出力

    false
    true

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌

## 参照

- P0995R1 Improving atomic_flag
- ogiroux/atomic_wait - Sample implementation of C++20 atomic_wait/notify
- P1135R6 The C++20 Synchronization Library
- P3309R3 `constexpr atomic` and `atomic_ref`
  - C++26で`constexpr`に対応した