метод atomic::compare_exchange_strong
Выполняет сравнение и атомарный обменяйте операцию в *this.
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile _NOEXCEPT;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) _NOEXCEPT;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile _NOEXCEPT;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) _NOEXCEPT;
Параметры
Exp
Значение типа Ty.Value
Значение типа Ty.Order1
Первый аргумент memory_order.Order2
Второй аргумент memory_order.
Возвращаемое значение
bool, показывающее результат сравнения значения.
Заметки
Этот атомарная операция сравнения и обмена сравнивает значение, хранящееся в *this с Exp.Если значения равны, то операция заменяет значение, хранящееся в *this с Val с помощью операции read-modify-write и применения ограничения о заказах памяти, определенные Order1.Если значения не равны, то операция использует значение, хранящееся в *this, чтобы заменить Exp и применяет ограничения о заказах памяти, определенные Order2.
Перегруженные варианты, которые не имеют использование memory_order секунды неявное Order2, которая основана на значении Order1.Если Order1 имеет значение memory_order_acq_rel, Order2 имеет значение memory_order_acquire.Если Order1 имеет значение memory_order_release, Order2 имеет значение memory_order_relaxed.Во всех остальных случаях Order2 равно Order1.
Для перегрузок, принимающих параметр memory_order 2, значение Order2 не должно быть memory_order_release или memory_order_acq_rel и не должен быть сильне, чем значение Order1.
Требования
Атомарный заголовок:
Std пространство имен: