Хранилище атомной нагрузки с порядком памяти

В потоке A сначала выполняется x.store(1, std::memory_order_release), затем в потоке B запускается x.load(std::memory_order_acquire) . x в потоке B не гарантирует чтение 1 хранилища по A. Если я использую memory_order_seq_cst, он будет гарантированно читать 1. верно?

1 ответ

Поток A сначала запускает x.store(1, std::memory_order_release), затем поток B запускает x.load(std::memory_order_acquire).

Как узнать, что один поток выполнял операцию за другой?

По сути, путем тестирования общего состояния? Как атомный?

Таким образом, способ определить, верна ли гипотеза, будет... проверить вывод: "прочитано 1, сохранено A" истинным или ложным.

Таким образом, вопрос читается в точности как тавтология (если x равно 2+2, x равно 2+2) или круговорот.

Нет разницы между порядками памяти в отношении загрузки / сохранения одной атомарной переменной. Это потому что std::memory_orderопределяет, как регулярные неатомарные обращения к памяти должны быть упорядочены вокруг атомарной операции.

Прочитайте std::memory_order для получения полной информации. Особенно:

Все модификации любой конкретной атомарной переменной происходят в полном порядке, который является специфическим для этой одной атомарной переменной.

Другие вопросы по тегам