|
1 / 1 / 0
Регистрация: 03.08.2017
Сообщений: 205
|
|||||||||||
Имеет ли смысл создавать volatile переменную16.09.2026, 11:08. Показов 13507. Ответов 171
У меня есть функция
0
|
|||||||||||
| 16.09.2026, 11:08 | |
|
Ответы с готовыми решениями:
171
1 класс имеет переменную указатель на 2, 2 имеет на 1 Применение описателя Volatile Пример использования спецификатора volatile |
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
|
|
| 20.09.2026, 01:43 | |
|
volatile так легко объяснить - эта штука появилась тогда когда оптимизирующие компиляторы стали мешать написанию драйверов устройств. если программа пару раз записывала в одну и ту же область памяти заранее известные значения - это не от того что програмист глупый а потому что этому одресу в памяти соответствовало физическое устройство и последовательная запись данных по одному и тому же адресу была частью протокола по обмену данными с этим устройством.
так и появилось volatile - что если указано что то прочитать или записать в такую переменную (а чаще по указателю на область памяти)- то компилятору об этом явно сообщают - что эта память особенная. ни к прерываниям ни к многопоточности это не имеет отношения. но некоторые особенности из такого поведения компиляторов пытаются использовать и для других целей.
0
|
|
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 842
|
||
| 20.09.2026, 02:45 | ||
|
0
|
||
|
фрилансер
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
|
||||||||||||
| 20.09.2026, 08:36 | ||||||||||||
|
например, Intel напрямую с памятью арифметические операции не производит, он почти всё делает через eax https://godbolt.org/z/ne35hjx5a
ЗЫ оптимизация включена: -O3
0
|
||||||||||||
|
Вездепух
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
|
|||
| 20.09.2026, 08:45 | |||
-O3. То есть ни полной замены памяти регистром, ни хоть сколь-нибудь продолжительного "кэширования" памяти в регистр не происходит. Именно это имел в виду jcxz. Именно об это идет речь в моем посте #19.
0
|
|||
|
фрилансер
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
|
|
| 20.09.2026, 08:55 | |
|
TheCalligrapher, речь у него идёт о том, что он желает заменить межпоточную синхронизацию через volatile
Но почему-то никто так не поступает
0
|
|
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 842
|
|||||||
| 20.09.2026, 11:58 | |||||||
|
Если бы не влиял, то 3-й командой была бы: add eax, 42 как более оптимальная; а 5-й команды и вовсе не было бы. "Смотрю в книгу, вижу фигу" - это про вас. Вам компилятор даже в этом примере ясно показывает влияние volatile. Прямо в глаза тычет. Но вы этого в упор не видите и продолжаете нести чушь."Слышал звон, да не знаю где он". Опять про вас. Моя бабушка лучше разбирается в многопоточном программировании. ![]() Добавлено через 2 минуты ![]() Добавлено через 5 минут RMW-операций с памятью нет в ARM-архитектуре (за исключением опционального bitband). Но это никак не мешает реализации атомарности на ARM. Если у реализатора есть голова на плечах. Атомарность - это совсем про другое. Но чайники часто путаются. Что мы и видим в этой теме. Добавлено через 2 минуты Ни про какую "многопоточную синхронизацию" автор ни разу не упомянул. Он так и не сказал зачем ему всё это нужно. Хоть его и спрашивали. Добавлено через 6 минут Объявление переменной volatile может быть вполне достаточно для некоторых способов межпоточной синхронизации. И позволяет обойтись без Interlocked-операций (на x86) или без операций эксклюзивного доступа (LDREX/STREX) на ARM и уж тем более - без мьютексов (с чего их сюда приплели - вообще неясно. Из контекста вопроса ТС даже не понятно - есть ли у него какие-то потоки или нет? Может у него однопоточный код с обработчиками прерываний и необходима корректная работа с переменной фонового кода и кода ISR)? Это уже не говоря о том, что мьютексы - это блокирующее средство синхронизации. Т.е. - весьма тяжёлое. Не на всех платформах полностью корректно реализованное. И грамотный разработчик не должен использовать его там, где не требуется.
0
|
|||||||
| 20.09.2026, 13:51 | |||
|
Не по теме: Так Вы совсем еще молодой парень если бабушка жива, дай бог ей здоровья Пара примеровВ этой теме (пост #57) всем предлагалось покритиковать многопоточную реализацию простой задачи. Приходите, критикуйте, можно вместе с бабушкой
0
|
|||
|
фрилансер
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
|
|||||||||||
| 20.09.2026, 15:06 | |||||||||||
|
jcxz, вот тебе пример, что volatile не защищает от гонки данных
https://onlinegdb.com/fork/VaxQuPhPC https://onlinegdb.com/fork/-c_36iGgv переменная N должна остаться равной 0 volatile не помогает
атомарная переменная N должна остаться равной 0
0
|
|||||||||||
|
7153 / 2341 / 353
Регистрация: 10.12.2013
Сообщений: 8,122
|
|
| 20.09.2026, 15:07 | |
|
"Моя бабушка лучше разбирается в многопоточном программировании"
2026год. безоглядно кидаться бабушками и дедушками при аргументации в части обсуждения многопоточного программирования не стоит. К примеру, дедушка Катлер, 86 лет, автор ядра Windows NT ( ну и VMS заодно ) весьма неплох в многопоточном программировании.
0
|
|
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
|
|
| 20.09.2026, 15:48 | |
|
Похоже многие путают volatile, атомарный доступ к памяти и атомарную операцию с содержимым памяти.
Отсюда и брожение умов.
0
|
|
|
Вездепух
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
|
||
| 20.09.2026, 16:29 | ||
|
Да, если задаться сумасшедшей целью, то выполнить непосредственное присваивание "память - память" переменных типа int на платформе x86, разумеется, можно через инструкцию movsb. Но никакого смысла в таком извращении нет и "подходящим" такой вариант называть не приходится.Еще какие-то?
0
|
||
| 20.09.2026, 16:37 | |||
|
0
|
|||
|
Вездепух
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
|
|
| 20.09.2026, 16:44 | |
|
... отдельно стоит заметить, что в теме конкурентного исполнения кода синхронизация и атомарность доступа - это совершенно разные вещи. Тут, я смотрю, оба термина валятся в одну кучу и используются как фактические синонимы, что является полнейшим бредом.
0
|
|
|
391 / 336 / 66
Регистрация: 14.10.2014
Сообщений: 1,537
|
|
| 20.09.2026, 17:19 | |
|
jykm, если предстоит работать с железом - то очень даже имеет. Прям must have в некоторых случаях. Сам видел и даже немного работал с кодом, где volatile во всю использовался.
0
|
|
|
фрилансер
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
|
|||
| 20.09.2026, 17:25 | |||
![]() jcxz, я сейчас именно про это. В остальном - допустим, я в контекст разговора не полностью вник, ок. Но причин для хамства не вижу . Даже от тех, кто элементарно не умеет расшаривать ссылку. Внутри которой некомпилирующийся однопоточный код
0
|
|||
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 903
|
|
| 20.09.2026, 18:18 | |
|
была где-то научная статься о том что достаточно для межпоточной синхронизации.
и вывод там был такой что необходимо и достаточно иметь инструкцию "atomic compare exchange" всё остальное не даёт гарантий.
0
|
|
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 842
|
|||
| 20.09.2026, 19:07 | |||
|
Типа: ADD [EDI],5 и других подобных. См.систему команд x86. Добавлено через 3 минуты Ещё раз и для вас: При чём тут атомарность и гонки если речь идёт о volatile? Какое отношение к теме имеет пример о неких гонках, если речь про volatile?
0
|
|||
|
Вездепух
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
|
|||||||||||||||||
| 20.09.2026, 19:14 | |||||||||||||||||
std::atomic<> доступ через захваченную ссылку сопровождается усердным перевычитыванием значения ссылки перед каждым инкрементом в цикле
volatile перечитыванием значения ссылки не занимается, то есть перед циклом один раз делается
inc). То есть что касается вопроса перевычитывания ссылки - Clang проявляет то же странное поведение, что и GCC.Почему? Зачем все время перечитывать значение ссылки в цикле в первом варианте? Просто косяк оптимизатора-кодогенератора? Или я упускаю какие-то более веские причины?
0
|
|||||||||||||||||
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 842
|
||||||||
| 20.09.2026, 19:22 | ||||||||
Добавлено через 3 минуты
0
|
||||||||
| 20.09.2026, 19:22 | |
|
исследование volatile int\ volatile int \ const int
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|