В целях упорядочивания является ли атомарное чтение-изменение-запись одной операцией или двумя?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 В целях упорядочивания является ли атомарное чтение-изменение-запись одной операцией или двумя?

Сообщение Anonymous »

Рассмотрим атомарную операцию чтения-изменения-записи, например x.exchange(..., std::memory_order_acq_rel). Для целей упорядочивания загрузки и сохранения в другие объекты это рассматривается как:
  • одна операция с семантикой получения-освобождения?< /p>
  • Или, как загрузка получения, за которой следует сохранение хранилища, с дополнительной гарантией, что другие загрузки и сохранения в x будут наблюдаться оба или ни один?
Если это №2, то, хотя никакие другие операции в том же потоке не могут быть переупорядочены до загрузки или после сохранения, остается открытой возможность того, что они могут быть переупорядочены между ними.В качестве конкретного примера рассмотрим:

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

std::atomic x, y;

void thread_A() {
x.exchange(1, std::memory_order_acq_rel);
y.store(1, std::memory_order_relaxed);
}

void thread_B() {
// These two loads cannot be reordered
int yy = y.load(std::memory_order_acquire);
int xx = x.load(std::memory_order_acquire);
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/65568185/for-purposes-of-ordering-is-atomic-read-modify-write-one-operation-or-two[/url]
Ответить

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

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

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

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

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