170 похожих чатов

Доброе утро. Подскажите пожалуйста, почему std::atomic при исполнении операции на

нём не обновляет значение volatile аргумента при неудаче?
https://godbolt.org/z/4YMTM5

20 ответов

15 просмотров

А с чего должен? И не волатильного аргумента, что ли, обновляет?

Артём-Колпаков Автор вопроса
Liber Azerate
А с чего должен? И не волатильного аргумента, что ...

В соответствии со смыслом квалификатора volatile. Если у меня действительно есть нужда в использовании последнего значения, а не кэшированного на момент инициализации операции, мне что, придется цикл в ручную писать?

Артём Колпаков
В соответствии со смыслом квалификатора volatile. ...

Честно, не знаю, чего ты хочешь. И как ты собираешься "действительно" последнее значение получить с обычной, пусть волатильной переменной. Однако в данном случае поведение как и с обычными аргументом, и меняться ничего не должно.

а где тут пример собственно, а то не понятно в чем собственно вопрос

Артём-Колпаков Автор вопроса
std::slavik
а где тут пример собственно, а то не понятно в чем...

vaSum: addss %xmm1, %xmm0 я спрашиваю, почему на каждой попытке обновить значение атомика не делается movss (%rsi), %xmm1

Артём Колпаков
vaSum: addss %xmm1, %xmm0 я спрашиваю, почему на к...

Я не вижу асм, ибо с телефона, но я до сих пор не понял, почему ты ожидаешь, что магия сделается, когда она не должна

Артём-Колпаков Автор вопроса
Liber Azerate
Я не вижу асм, ибо с телефона, но я до сих пор не ...

Я еще раз говорю - volatile. В асм коде я вижу lock-free алгоритм замены значения атомика. В случае крайнего невезения значение переменной in может поменяться бесконечно много раз

std::slavik
так чего вы хотите то от volatile?

Мне кажется, он хочет, чтобы во время атомарной операции значение могло измениться

Артём Колпаков
Я еще раз говорю - volatile. В асм коде я вижу loc...

Это не важно С точки зрения пользователя volatile переменная читается ровно один раз, поэтому компилятор корректный код сгенерил

Артём-Колпаков Автор вопроса
Sergey Skvortsov
Это не важно С точки зрения пользователя volatile ...

Скорее не с точки зрения volatile, а с точки зрения операции https://godbolt.org/z/5K5fq5

атомарные операции не мой конек вообще, но попробую ответить 1) чтение и запись через volatile это часть наблюдаемого поведения программы (intro#abstract-6.1) 2) наблюдаемое поведение должно быть одинаковым при каждом запуске программы (intro#abstract-5) 3) если использовать вашу семантику, то к наблюдаемому поведению программы относится в том числе некое неопределенное количество чтений volatile переменной, что идет вразрез с принципами абстрактного вычислителя как личное мнение я бы добавил, что когда речь заходит о volatile, от компилятора не ждешь, что он подложит такую свинью. все чтения и записи должны быть на виду, потому что это наверняка регистры какого-нибудь устройства

Артём-Колпаков Автор вопроса
Vlad
атомарные операции не мой конек вообще, но попробу...

Я позже кидал код, где вместо volatile параметра используется атомарный параметр, который за время cas-loop'a потенциально также может быть изменён (другим потоком), так что мой вопрос был связан не с volatile, а с атомиком. Иными словами, я должен самостоятельно писать cas-loop дабы сказать, что поведение, которое я желаю наблюдать, является недетерминированным, но это неизменно при каждом запуске? Хотя я еще не разбираюсь в понятии абстрактной машины, мне кажется что здесь говорится, что исполнение должно совпадать с одним из возможных исполнений на абстрактной машине, а здесь вообще упоминается недетерминированность. Благодарю.

Артём Колпаков
Я позже кидал код, где вместо volatile параметра и...

В данном случае вообще не может быть никаких вариантов, посмотри на сигнатуру fetch_add; загрузка из volatile переменной будет ровно один раз при вычислении аргумента

Артём-Колпаков Автор вопроса
Sergey Skvortsov
В данном случае вообще не может быть никаких вариа...

Благодарю, что открыли глаза. Там передача по значению, да уж... А составное присваивание эквивалентно.

Артём-Колпаков Автор вопроса
Артём Колпаков
Благодарю, что открыли глаза. Там передача по знач...

Интересно, если бы там была ссылка, моё предположение было бы верным?..

Артём Колпаков
Я позже кидал код, где вместо volatile параметра и...

1) раз не в volatile дело, то и нет большого смысла рассуждать на уровне абстрактной машины, потому что манипуляции с атомарными переменными не относятся к наблюдаемому поведению сами по себе (intro#abstract-6) 2) соответственно, intro#abstract-5 это не про ваш пример 3) недетерминированность это про unspecified поведение, как гласит intro#abstract-3 вообще, на cppcon'е в этом году хорошо раскрыли тему абстрактной машины

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта