Нарушает ли порядок выпуска порядок последовательности-предыдущего порядка?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Нарушает ли порядок выпуска порядок последовательности-предыдущего порядка?

Сообщение Anonymous »

Следующий код очень простой иллюстрирует заказ на выпуск: < /p>

Код: Выделить всё

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
}

Стандарт говорит, что Assert в строке 4 может стрелять, потому что b.load () не переносит зависимость в a.load () .
Однако, согласно определению последовательности,

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»