Почитаем вражеских сайтов.
http://en.cppreference.com/w/cpp/atomic/memory_order
If an atomic store in thread A is tagged memory_order_release and an atomic load in thread B from the same variable is tagged memory_order_acquire, all memory writes (non-atomic and relaxed atomic) that happened-before the atomic store from the point of view of thread A, become visible side-effects in thread B...
Перевод примерно такой: если атомарная запись в потоке A сделана с флагом «memory_order_release» и атомарное чтение в потоке B из той же переменой сделано с флагом «memory_order_acquire», то любая запись в память перед вышеуказанной атомарной записью будет видна потоку B.
Как-то тупо звучит. Даже без атомарности, барьеров памяти и т.п. поток B увидит в памяти всё, что нафигачил поток А. Правда в неопределённом порядке. Но тут про порядок ничего сказано и не было.
Во-вторых зря они написали «same variable». Барьеры памяти разве следят за тем КУДА пишут и ОТКУДА читают? Они вроде просто препятствуют переходу через себя ЛЮБЫХ операций некого типа (напр. записи или чтения), неважно с какой именно переменной идёт работа - с той же или не с той же.
Конечно там дальше написано
...that is, once the atomic load is completed, thread B is guaranteed to see everything thread A wrote to memory.
Сайт писали тормоза?