bool
test_and_set(memory_order order = memory_order_seq_cst
) volatile noexcept; // (1) C++11
bool
test_and_set(memory_order order = memory_order_seq_cst
) noexcept; // (2) C++11
constexpr bool
test_and_set(memory_order order = memory_order_seq_cst
) noexcept; // (2) C++26
概要
テストしてフラグを立てる
効果
order
で指定されたメモリオーダーにしたがって、アトミックに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 = x.test_and_set();
std::cout << result << std::endl;
}
{
// 値をtrueに設定する(変更前の値はtrue)
bool result = x.test_and_set();
std::cout << result << std::endl;
}
}
出力
false
true
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅
参照
- P3309R3
constexpr atomic
andatomic_ref
- C++26で
constexpr
に対応した
- C++26で