最終更新日時(UTC): 2025年04月03日 04時51分18秒
yoh が更新

履歴 編集

function
<atomic>

# std::atomic_flag::clear(C++11)

    void
      clear(memory_order order = memory_order_seq_cst
            ) volatile noexcept;                      // (1) C++11

    void
      clear(memory_order order = memory_order_seq_cst
           ) noexcept;                                // (2) C++11
    constexpr void
      clear(memory_order order = memory_order_seq_cst
           ) noexcept;                                // (2) C++26

## 概要

フラグをクリアする

## 要件

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

- `memory_order_consume` (C++26で非推奨)
- `memory_order_acquire`
- `memory_order_acq_rel`

## 効果

`order`で指定されたメモリオーダーにしたがって、アトミックに`false`値を書き込む。

## 戻り値

なし

## 例外

投げない

## 例

    #include <iostream>
    #include <atomic>

    int main()
    {
      std::atomic_flag x = ATOMIC_FLAG_INIT;

      std::cout << std::boolalpha;
      {
        // 値をtrueに設定する(変更前の値はfalse)
        bool result = x.test_and_set();
        std::cout << result << std::endl;
      }

      // 値をfalseにする
      x.clear();

      {
        // 値をtrueに設定する(変更前の値はfalse)
        bool result = x.test_and_set();
        std::cout << result << std::endl;
      }
    }

### 出力

    false
    false

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅

## 参照

- LWG Issue 2138. `atomic_flag::clear` should not accept `memory_order_consume`
- P3309R3 `constexpr atomic` and `atomic_ref`
  - C++26で`constexpr`に対応した
- P3475R2 Defang and deprecate memory_order::consume