Нарушает ли реализация, изменяющая порядок вычислений в одном потоке, [intro.execution] p8?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Нарушает ли реализация, изменяющая порядок вычислений в одном потоке, [intro.execution] p8?

Сообщение Anonymous »

[intro.execution] p8 говорит:

Для любых двух оценок A и B, если A располагается перед B (или, что то же самое, B располагается после A), то выполнение A должно предшествовать выполнению B.

Рассмотрим этот пример:

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

#include 
#include 
int main(){
std::atomic v1;
std::atomic v2;
auto t1 = std::thread([&](){
v1.store(1,std::memory_order:relaxed);  // #1
v2.store(2,std::memory_order:relaxed);  // #2
});
t1.join();
}
Реальная реализация может выполнять переупорядочение StoreStore, в том числе во время компиляции, так что #2 выполняется t1, а #1 — нет. Нарушает ли это изменение порядка [intro.execution] p8? Согласно [intro.execution] p8, в абстрактном машинном смысле, если #2 выполняется t1, мы, похоже, можем сделать вывод, что #1 уже был выполнен потоком t1, поскольку выполнение #1 должно предшествовать выполнению #2; однако изменение порядка StoreStore делает это утверждение ложным.
Как интерпретировать здесь противоречие?

Подробнее здесь: https://stackoverflow.com/questions/798 ... olate-intr
Ответить

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

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

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

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

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