BaseType * old_value, BaseType new_value) noexcept;
return p->compare_exchange_weak(*old_value, new_value);
STD::ATOMIC_COMPARE_EXCHANGE_WEAK_EXPLICIT
, ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно сравнивает значение с ожидаемым и, если они равны и обновление может быть произведено атомарно, то сохраняет новое значение. Если значения не равны или обновление не может быть произведено атомарно, то заменяет ожидаемое значение прочитанным.
template
bool atomic_compare_exchange_weak_explicit(
volatile atomic
BaseType * old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
template
bool atomic_compare_exchange_weak_explicit(
atomic
BaseType * old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
return p->compare_exchange_weak(
*old_value, new_value, success_order, failure_order);
D.3.9. Специализации шаблона std::atomic
Предоставляются специализации шаблона std::atomic
для целочисленных и указательных типов. Для целочисленных типов специализации обеспечивают атомарные операции сложения, вычитания и поразрядные в дополнение к имеющимся в основном шаблоне. Для указательных типов в дополнение к основному шаблону предоставляются арифметические операции над указателями.
Имеются специализации для следующих целочисленных типов:
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
а также для типа std::atomic
при любом типе T
.
D.3.10. Специализации std::atomic<
Специализации std::atomic<
шаблона класса std::atomic
дают атомарный целочисленный тип для каждого фундаментального целочисленного типа, с полным набором операций.
Ниже перечислены все такие специализации шаблона std::atomic<>
:
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
std::atomic
Экземпляры этих специализаций не удовлетворяют требованиям концепций CopyConstructible
и CopyAssignable
, поскольку такие операции невозможно выполнить атомарно.
template<>
struct atomic<
atomic() noexcept = default;
constexpr atomic(integral-type) noexcept;
bool operator=(integral-type) volatile noexcept;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
bool is_lock_free() const volatile noexcept;
bool is_lock_free() const noexcept;
void store(
volatile noexcept;
void store(
const volatile noexcept;
memory_order = memory_order_seq_cst) const noexcept;
memory_order = memory_order_seq_cst) volatile noexcept;