namespace std {
void
atomic_flag_clear_explicit(
volatile atomic_flag* object,
memory_order order) noexcept; // (1) C++11
void
atomic_flag_clear_explicit(
atomic_flag* object,
memory_order order) noexcept; // (2) C++11
constexpr void
atomic_flag_clear_explicit(
atomic_flag* object,
memory_order order) noexcept; // (2) C++26
}
概要
アトミックにフラグをクリアする
要件
order
が以下のメモリオーダーではないこと:
効果
order
で指定されたメモリオーダーにしたがって、アトミックにfalse
値を書き込む。
戻り値
なし
例外
投げない
例
#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_explicit(&x, std::memory_order_acq_rel);
std::cout << result << std::endl;
}
// 値をfalseにする
std::atomic_flag_clear_explicit(&x, std::memory_order_release);
{
// 値をtrueに設定する(変更前の値はfalse)
bool result = std::atomic_flag_test_and_set_explicit(&x, std::memory_order_acq_rel);
std::cout << result << std::endl;
}
}
24
#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_explicit(&x, std::memory_order_acq_rel);
std::cout << result << std::endl;
}
// 値をfalseにする
std::atomic_flag_clear_explicit(&x, std::memory_order_release);
{
出力
false
false
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅