|
1 / 1 / 0
Регистрация: 03.08.2017
Сообщений: 205
|
|||||||||||
Имеет ли смысл создавать volatile переменную16.09.2026, 11:08. Показов 14141. Ответов 171
У меня есть функция
0
|
|||||||||||
| 16.09.2026, 11:08 | |
|
Ответы с готовыми решениями:
171
1 класс имеет переменную указатель на 2, 2 имеет на 1 Применение описателя Volatile Пример использования спецификатора volatile |
|
3 / 2 / 1
Регистрация: 21.09.2026
Сообщений: 36
|
||
| 28.09.2026, 16:34 | ||
|
Первый - это изменение какой-то переменной в разных потоках, с гарантией, что эта переменная видна во всех потоках в актуальном состоянии, и второй - это уже не про собственно переменную, а синхронизацию операций (например, работают три потока, и они должны гарантированно выводить A, B и C, и только в таком порядке). Это разные задачи, и решать их нужно немного по разному. Тот пример, что был приведен на 2 странице данной темы, на мой взгляд, как раз относится ко второму случаю (хотя, если я его правильно понял, там просто используется т.н. холостой цикл, что не совсем верно). Если бы мне пришлось делать именно синхронизацию потоков, я бы выбрал или std::condition_variable (C++), или pthread_cond_t/pthread_barrier_t (C). Но я исхожу из задач практических, а как оно там внутри будет устроено, меня уже не так волнует.
0
|
||
|
Вездепух
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
|
||
| 28.09.2026, 17:29 | ||
|
Речь о семантике упорядочения памяти в данном контексте ведется не потому, что она влияет на некие посторонние абстрактные операции "выводить A, B и C", а именно о тех же самых операциях синхронизации потоков, когда у вас есть не один, а несколько таких "доморощенных" синхронизационных примитивов. То есть, например, у вас есть не одна, а три переменных - A, B и C - которые вы используете для целей синхронизации потоков через операции записи и чтения. Одни потоки записывают в эти переменные значения, скажем, 0 и 1, а другие проверяют содержимое этих переменных и на основе этого принимают решение ждать или работать дальше (0 - свободно, 1 - занято). И для того, чтобы избежать дедлоков, в ситуациях, когда потокам нужно поменять или проверить две или более таких переменных, они договорились делать это строго в заранее оговоренном относительном порядке A -> B -> C. Без гарантий упорядочения памяти разные потоки могу "видеть" разные относительные порядки изменения значений в этих трех переменных. То, что один поток честно придерживался договоренности выставлять переменные в порядке A -> B -> C, совсем не гарантирует, что читающий поток "увидит" изменения этих переменных в том же порядке. Вышеупомянутая договоренность без гарантий упорядочения памяти просто не работает. У меня чешется язык сказать, что если у вас используется только одна-единственная такая синхронизационная переменная (как в коде нашего волатильного синхронизатора), то подобные соображения вас не должны волновать, достаточно просто атомарности операций чтения-записи этой переменной и "все будет работать". Но на самом деле и это не так. Все равно не достаточно.
0
|
||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
|
|
| 28.09.2026, 17:35 | |
|
Очень умные все. Наверное TheCalligrapher научил. Плохо понимаю вообще.
0
|
|
|
3 / 2 / 1
Регистрация: 21.09.2026
Сообщений: 36
|
|
| 28.09.2026, 17:36 | |
|
TheCalligrapher, ну возможно, но я, как и сказал ранее, не стал бы мудрствовать лукаво, разбираясь в командах для различных архитектур (коих множество, и я в них как свинья в апельсинах), а просто использовал бы имеющиеся инструменты в С или С++, будучи уверенным, что это гарантированно работает и выполняет то и так, как я ожидаю.
Что касается гарантий упорядочивания памяти - насколько я помню, по умолчанию используется самая строгая, а это собственно даст максимальные гарантии. Ну а далее, когда все будет работать, там уже можно заниматься оптимизацией (если за это заплатят).
0
|
|
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
|
|
| 28.09.2026, 17:37 | |
|
0
|
|
| 28.09.2026, 17:43 | ||
|
Не по теме:
0
|
||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
|
||||||
| 28.09.2026, 17:49 | ||||||
|
Вот это мне подсказал ИИ в прошлой писанине.
Вызывать функцию рекурсивно уже с переименованным путём. Строка 11 - 15. Не обрабатывало сразу данные. Не заходило в переименованные папки. Вы же ни кто не подскажете...
И.И. - Инструмент... Пользоваться уметь надо...
0
|
||||||
|
Заблокирован
|
||||||||
| 28.09.2026, 18:06 | ||||||||
|
Этот код не кроссплатформенный, даже если он не использует Win32 API напрямую, а лишь CRT от майкрософт. К тому же, использование виндового разделителя пути L'\\' крякнет на других платформах.А ведь можно было написать проще, на современном С++17 и кроссплатформенно: типа вот такой псевдокод по мотивам примеров из cppreference
0
|
||||||||
| 28.09.2026, 18:10 | |
|
0
|
|
| 28.09.2026, 18:12 | |
|
0
|
|
| 28.09.2026, 18:16 | ||
|
Не по теме:
0
|
||
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 849
|
||||
| 28.09.2026, 18:21 | ||||
|
А насчёт "полезной инфы": Вся достаточная инфа была в моём примере. А если кто его не понял - я не виноват. Если вы его не поняли - пройдите мимо. Не ваше это значит, займитесь чем-то другим. ![]() Или вы троллите, как товарищ выше?
0
|
||||
|
Заблокирован
|
|
| 28.09.2026, 18:22 | |
|
1
|
|
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
|
| 28.09.2026, 18:27 | |
|
Наталья8, я чёт всегда думал, что вы не на С++ а на С пишете - вот серьёзно. Понятно, что код из вашего сообщения можно и в плюсы запихнуть и он там прекрасно сработает. Ну мож не прекрасно - но мы его напильником подравняем и он сработает. Но блин - я вот честно хз что это за функции:
_freea(Mask)*(wcsrchr(new_full_Path, L'\\') + 1) = '\0';wcscat(new_full_Path, new_name)Конечно можно понять из контекста / названия / да хоть погуглить. Но когда с подобным не работал - советовать что-то сложно. Лично мне гораздо проще и привычнее работать с std::string и его производными, с умными указателями и прочими современными вещами. А возвращаться в С++ 98/2003 чёт как то не охота.... На работе это не требуется - за него ещё и по голове настучат. Разве что на собесах....
1
|
|
|
352 / 150 / 10
Регистрация: 19.07.2024
Сообщений: 849
|
|||||
| 28.09.2026, 18:31 | |||||
|
О чём говорил тут уже неоднократно. ![]() На сём ставлю точку. Далее переливайте из пустого в порожнее без меня.
0
|
|||||
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
||
| 28.09.2026, 19:10 | ||
|
TheCalligrapher, zayats80888, и прочих экспертов мне как до луны пешком. И это не издёвка, сарказм, троллинг и прочее - это чистая правда. А опираюсь я вот на это цитата из cppreference Note that volatile variables are not suitable for communication between threads; they do not offer atomicity, synchronization, or memory ordering. A read from a volatile variable that is modified by another thread without synchronization or concurrent modification from two unsynchronized threads is undefined behavior due to a data race. То есть - при использовании volatile для синхронизации получаем неопределённое поведение. А UB означает, что случиться может всё, что угодно - сегодня работает, завтра работает, а через 10 лет даст сбой. А вы утверждаете что пример корректный. Вот я и никак не могу понять - в стандарте одно, в реальности другое. Мож в жопу стандарт ? Его тоже люди сочиняют и могут ошибаться.
0
|
||
| 28.09.2026, 19:12 | |
|
0
|
|
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
||
| 28.09.2026, 19:24 | ||
|
Я на полном серъёзе - СЕЙЧАС Я ПОСТАВЛЮ ТОЧКУ В СРАЧЕ В ДАННОЙ ТЕМЕ, потому как похоже докопался до истины..... и это не тролллинг...... Добавлено через 11 минут в коде происходят две разные вещи: Автор кода хочет получить: 1. Компилятор действительно каждый раз обращается к statevolatile обеспечивает первую часть.Вторая часть должна исходить из гарантий конкретной платформы. Если автор говорит: «Я предполагаю платформу, где чтение и запись int атомарны»А стандартный C++ говорит другое: Для переносимого C++ нужно выразить вторую часть явно:Поэтому получается очень точная формулировка: Алгоритм автора корректен при заявленных им предпосылках о платформе. volatile используется для обеспечения наблюдаемых обращений к state, но не для обеспечения атомарности. Однако запись volatile int сама по себе не является переносимой реализацией межпоточной синхронизации согласно стандарту C++.И ещё важное уточнение к твоей фразе «по стандарту C++ нет»: это не значит, что стандарт запрещает такой код или что он обязательно неправильно работает. Он просто не даёт тебе необходимых межпоточных гарантий для volatile int.Именно поэтому автор может совершенно обоснованно сказать «этот алгоритм работает на x86/ARM/bare-metal», а стандартный C++ программист одновременно может сказать «volatile int недостаточно для portable C++ multithreading». Эти утверждения друг другу не противоречат.Шах и мат господа теоретики и практики!!! И да - это я нейронку терзал.
0
|
||
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
|
| 28.09.2026, 19:25 | |
|
картинка для пояснения
0
|
|
| 28.09.2026, 20:00 | |
|
0
|
|
| 28.09.2026, 20:00 | |
|
исследование volatile int\ volatile int \ const int
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|