В C ++, почему мы не обязаны просто использовать явные вызовы для std :: atomic_thread_fence () для упорядочения памяти?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 В C ++, почему мы не обязаны просто использовать явные вызовы для std :: atomic_thread_fence () для упорядочения памяти?

Сообщение Anonymous »

подразумевая, что все операции на экземпляре экземпляра std :: atomic используйте расслабленную память.

Код: Выделить всё

#include 

std::atomic i;

bool f1(int e, int v)
{
return i.compare_exchange_strong(e, v);
}

bool f2(int e, int v)
{
std::atomic_thread_fence(std::memory_order_seq_cst);
bool res = i.compare_exchange_strong(e, v, std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_seq_cst);
return res;
}
Использование Godboldt для компиляции для слабо упорядоченной архитектуры (https://godbolt.org/z/tdh7gek5s), код ассемблера для двух функций точно такой же. Которая подтверждает гипотезу о том, что сочетание атомных операций по переменным с заборами не является строго необходимым (игнорирование устаревшего порядка потребления). Кто -нибудь может дать пример кода или пример сценария, в котором эта гипотеза не удается? явные заборы. Заказ памяти, вероятно, может быть описана более четко и компактно, если упорядочение явными заборами и упорядочением операциями на атомных переменных не перекрывались.

Подробнее здесь: https://stackoverflow.com/questions/797 ... omic-threa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»