最終更新日時: 2025年09月29日 02時08分59秒 (JST)
Raclamusi が更新

履歴 編集

function
<atomic>

# std::atomic_flag_test_explicit(C++20)

    namespace std {
      bool
        atomic_flag_test_explicit(const volatile atomic_flag* object,
                                  memory_order order) noexcept;  // (1) C++20

      bool
        atomic_flag_test_explicit(const atomic_flag* object,
                                  memory_order order) noexcept;  // (2) C++20
      constexpr bool
        atomic_flag_test_explicit(const atomic_flag* object,
                                  memory_order order) 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 << std::atomic_flag_test_explicit(&x, std::memory_order::acquire) << std::endl;

      std::atomic_flag_test_and_set_explicit(&x, std::memory_order::release);
      std::cout << std::atomic_flag_test_explicit(&x, std::memory_order::acquire) << 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`に対応した