Если вычисление значения A атомарного объекта M происходит до вычисления значения B для M, и A получает свое значение от побочного эффекта X на M, тогда значение, вычисленное B, является либо значением, сохраненным X, либо значением, сохраненным побочным эффектом Y на M, где Y следует за X в порядке модификации M< /strong>.
Это правило обычно интерпретирует этот пример
Код: Выделить всё
std::atomic x{0};
// thread 1:
x.store(1); // #1
x.store(2); // #2
// thread 2:
x.load(); // #3
x.load(); // #4
Однако рассмотрим следующий пример:
Код: Выделить всё
std::atomic x{0};
// thread 1:
x.store(3); // #1
//thread 2:
x.store(4); // #2
//thread 3:
x.load(); // #3
x.load(); // #4
Интересно, можно ли использовать правило согласованности чтения-чтения для определения порядка модификации для второго примера.
Обновление
Как здесь работает логика предложений, позволяющая рассуждать в обратном направлении от наблюдаемого поведения к порядку модификации[/b]?< /п>Подробнее здесь: https://stackoverflow.com/questions/790 ... g-to-the-r