В чем разница между чтением значения atomic_uint
с memory_order_relaxed и чтением значения volatile unsigned int
(при условии, что изменчивые операции являются атомарными)?memory_order_relaxed load vs volatile load
В частности, давайте определим:
Решение 1
- "писатель" нить пишет на
atomic_uint
(с любым порядком памяти классификатором, от memory_order_relaxed до memory_order_seq_cst) - «читатель «нить выполняет атомарную релаксацию на том же
atomic_uint
Раствор 2
- «писатель» нить пишет в
volatile unsigned int
- «читатель» поток считывает это значение
как есть, я знаю, что в обоих случаях не предлагают любые гарантии относительно способности читателя читать значение, написанное автором. То, что я пытаюсь понять, - это разница между изменчивым чтением и расслабленным атомным чтением. Что обеспечивает один другой, если учитывать согласованность после чтения?
Единственное различие, которое я вижу:
- летучих операции не могут быть повторно упорядоченным между ними, в то время как атомная нагрузка может быть повторно заказана с другими атомарными операциями
Есть ли что-то еще ?
Одним из них является неопределенное поведение (при отсутствии внешней синхронизации), а другое нет. –