Код: Выделить всё
std::atomic a{ 0 };
std::atomic b{ false };
void t1()
{
a.store(1, std::memory_order_relaxed); //1
b.store(true, std::memory_order_release); //2
}
void t2()
{
while (!b.load(std::memory_order_consume)); //3
assert(a.load(std::memory_order_relaxed) == 1); //4
}
Однако, согласно определению последовательности,
full-expression sexpredess перед следующим, ранее подключенное к Expression. /> < /blockquote>
и последовательность, предварительно введенная введением. B.
line 3-это полное выражение перед строкой 4, которая означает, что строка 3 является секвенированной линией 4, и, как следствие, строка 3 происходит, потому что строка 4.
основана на тех же правилах, строка 1 является последовательной линией. /> С линией 2 Межпользователь происходит до строки 3 из-за упорядоченной зависимости ранее, сформирована цепь, связанная с этим,: строка 1-> строка 2-> строка 3-> Линия 4, как < /p>
Независимо от нити, оценка A происходит в товременной оценке b, если какая-либо из следующих: < /p>
a synchronise-with b. < /li>
a случается, и x, и x случается, до b. < /li>
< /ol>
< /blockquote>
Итак, побочный эффект линии 1 должен быть виден в линию 4. Но я не знаю, где является ключ, который приводит к этому неправильному результату, поскольку каждый шаг полностью подчиняется формальным определениям.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... fore-order