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

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

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

20 ответов

8 просмотров

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

Артём-Колпаков Автор вопроса
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'е в этом году хорошо раскрыли тему абстрактной машины

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Где можно найти примеры эффективного "асинхронного" tcp сервера на C? Я видел select, kqueue, poll, epoll и т.д. Ввод-вывод неблокирующий, но обработка клиентов блокирующая
#
10
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Hi Everyone! To all Are you Looking for Interview Support at the Lowest Price? Look no further! Then contact us 👉We offer Interview Support :-for a low cost variety of tech...
Rambabu Nallamilli
3
Hello experts, Could someone kindly tell me how to run vacuum inside a plpgsql function? If you have any link please share. Thank you
Amol Palav
10
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
7
Карта сайта