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

履歴 編集

function
<atomic>

# std::atomic_flag_test_and_set(C++11)

    namespace std {
      bool
        atomic_flag_test_and_set(volatile atomic_flag* object) noexcept; // (1) C++11

      bool
        atomic_flag_test_and_set(atomic_flag* object) noexcept;          // (2) C++11
      constexpr bool
        atomic_flag_test_and_set(atomic_flag* object) noexcept;          // (2) C++26
    }

## 概要

アトミックにテストしてフラグを立てる

## 効果

`memory_order_seq_cst`のメモリオーダーにしたがって、アトミックに`true`値を書き込む。この操作はread-modify-write操作である。

## 戻り値

変更前の値

## 例外

投げない

## 例

    #include <iostream>
    #include <atomic>

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

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

### 出力

    false
    true

## バージョン

### 言語

- C++11

### 処理系

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

## 参照

- P3309R3 `constexpr atomic` and `atomic_ref`
  - C++26で`constexpr`に対応した