Хранилище атомной нагрузки с порядком памяти
В потоке 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 для получения полной информации. Особенно:
Все модификации любой конкретной атомарной переменной происходят в полном порядке, который является специфическим для этой одной атомарной переменной.