У меня есть вопрос относительно статьи GCC-Wiki. Под заголовком "Общее резюме" приведен следующий пример кода:
Тема 1:
y.store (20);
x.store (10);
Тема 2:
if (x.load() == 10) {
assert (y.load() == 20)
y.store (10)
}
Говорят, что если все магазины релиз, и все нагрузки приобретать, утверждение в потоке 2 не может потерпеть неудачу. Это ясно для меня (поскольку хранилище x в потоке 1 синхронизируется с нагрузкой от x в потоке 2).
Но теперь приходит часть, которую я не понимаю. Также сказано, что если все магазины релиз, а все нагрузки потребляют, результаты будут одинаковыми. Не было бы возможным, чтобы загрузка из y была поднята до нагрузки от x (потому что между этими переменными нет зависимости)? Это означало бы, что утверждение в потоке 2 действительно может потерпеть неудачу.