Код: Выделить всё
// Thread 1:
obj.store(1,Release); // #1
// Thread 2:
obj.store(2, Release); // #2
//Thread 3:
obj.load(Acquire); // #3
obj.load(Relaxed); // #4
p>
- происходит перед #3, согласно
Код: Выделить всё
#1
A синхронизируется с B
- не встречается раньше #3, согласно
Код: Выделить всё
#2
Если побочный эффект X на атомарный объект M происходит до вычисления значения B для M, то оценка B берет свое значение из X или из побочного эффекта. Y, следующий за X в порядке модификации M.
- происходит перед #4, согласно
Код: Выделить всё
#3
A секвенируется перед B
Объедините третье условие и [intro.races] p16
Если вычисление значения A атомарного объекта M происходит до значения вычисление B для M, и A берет свое значение из побочного эффекта X на M, тогда значение, вычисленное B, является либо значением, сохраненным X, либо значением, сохраненным побочным эффектом Y на M, где Y следует за X в модификации порядок M.
Мы можем сделать вывод, что побочный эффект в #2 следует за #1 в порядке модификации obj .
Итак, можем ли мы сделать вывод, что #1 происходит раньше #2 согласно [intro.races] стр.15
Если операция A, изменяющая атомарный объект M, происходит до операции B, изменяющей M, то A находится раньше, чем B в порядке модификации M.
Мне кажется, что «A раньше, чем B в M» является лишь необходимым условием для «A происходит раньше B», другими словами, кажется, мы не можем сделать вывод, что #1 происходит раньше #2, верно?
Подробнее здесь: https://stackoverflow.com/questions/781 ... operations