Определяется ли порядок побочного эффекта в порядке модификации тем, когда побочный эффект возникает?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Определяется ли порядок побочного эффекта в порядке модификации тем, когда побочный эффект возникает?

Сообщение Anonymous »

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

#include 
#include 
#include 
#include 
#include 
int main()
{
std::atomic flag = {false};
std::atomic val = {0};
std::thread t1([&](){
val.store(1,std::memory_order::relaxed);  // #1
flag.store(true,std::memory_order::relaxed);  // #2
});
std::thread t2([&](){
while(!flag.load(std::memory_order::relaxed)){}  // #3
auto r = val.exchange(2,std::memory_order::relaxed); // #4
assert(r!=0);  // #5
});
t1.join();
t2.join();
}
В этом примере #3 не синхронизируется с #2, однако он может гарантировать, что #1 уже произошел, когда #4 оценивается. Означает ли это, что порядок модификации val равен {0, 1, когда #4 оценивается так, что часть чтения этой операции чтения-изменения-записи гарантированно будет читать 1< /code> согласно [atomics.order] p10

Атомарные операции чтения-изменения-записи всегда должны считывать последнее значение (в порядке модификации), записанное ранее запись, связанная с операцией чтения-изменения-записи.

Гарантированно ли, что #5 в этом примере не сработает? В этом примере утверждение не срабатывает https://godbolt.org/z/G8KzK3o8W

Подробнее здесь: https://stackoverflow.com/questions/790 ... by-when-th
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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