Реализация должна гарантировать, что последнее значение (в порядке модификации), назначенное атомарной операцией или операцией синхронизации, станет видимым для всех других потоков за конечный период времени.

оложим, у меня есть темаA что пишет вatomic_int x = 0;, с помощьюx.store(1, std::memory_order_relaxed);, Без каких-либо других методов синхронизации, сколько времени потребуется, чтобы другие потоки могли это увидеть, используяx.load(std::memory_order_relaxed);? Возможно ли, что значение записано вx остается полностью ориентированным на потоки, учитывая текущее определение модели памяти C / C ++, которое дает стандарт?

Практический случай, который я имею под рукой, - это когда нитьB читаетatomic_bool часто проверять, должен ли он выйти; Другой поток в какой-то момент пишетправда к этому bool, а затем вызывает join () в потоке B. Очевидно, я не против вызвать join () до того, как поток B сможет даже увидеть, что был установлен atomic_bool, и не против, когда поток B уже видел изменение и вышел из выполнения до Я звоню join (). Но мне интересно: используяmemory_order_relaxed с обеих сторон, возможно ли вызвать join () и заблокировать «навсегда», потому что изменение никогда не распространяется на поток B?

редактировать

Я связался с Марком Бэтти (мозгом математической проверки и последующего исправления требований к модели памяти C ++). Первоначально о чем-то другом (который оказался известной ошибкой в ​​cppmem и его тезисе; поэтому, к счастью, я не полностью себя обманул и воспользовался возможностью, чтобы спросить его об этом тоже; его ответ был:

Q: Может ли теоретически быть, что такое хранилище [memory_order_relaxed без (любой последующей) операции освобождения] никогда не достигнет другого потока?
Отметка:Теоретически да, но я не думаю, что это наблюдалось.
В: Другими словами, разве расслабленные хранилища не имеют никакого смысла, если вы не объедините их с какой-либо операцией освобождения (и получите данные в другом потоке), предполагая, что вы хотите, чтобы другой поток это увидел?
Отметка:Почти все варианты использования для них используют релиз и приобретение, да.

Ответы на вопрос(2)

Ваш ответ на вопрос