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

Есть мнение некоторых людей, что если в переменную типа time_t

один поток пишет (через каждые 0,5 сек. сохраняет туда текущее время), а другие потолки оттуда читают, то такую переменную достаточно объявить с volatile. Синхронизации не нужны.
Какого ваше мнение?

24 ответов

21 просмотр

как будто бы синхронизации не нужны только когда ВСЕ только читают?

volatile для этого и придумал, разве нет? Не оптимизировать эту переменную и не надеяться, что переменная не может быть изменена из-вне.

неправда

Дмитрий 🎮
volatile для этого и придумал, разве нет? Не опти...

volatile защищает от оптимизаций, основанных на том, что значение не может измениться "извне"

Дмитрий 🎮
volatile для этого и придумал, разве нет? Не опти...

volatile придуман для MMIO и каких-то странных обработчиков сигналов

это слово рекомендация компилятору, оно с асинхронностью не связано. Такую переменную компилятор не превратит в литерал (константу), если не увидит изменения в коде

Mikail Bagishov
volatile придуман для MMIO и каких-то странных обр...

О, вот как называется это — MMIO, когда регистр или порт в программе это просто переменная. Спасибо, буду теперь знать.

на х86 мб и будет работать, но если писать нормально и гарантированно, лито покрывать mutex либо через атомики

это UB

d7d1cd- Автор вопроса
Андрей Таусинов
как будто бы синхронизации не нужны только когда В...

Те люди говорили что-то типа: единственный негативный эффект, который мы можем получить - это чтение предыдущего значения, а не нового из той переменной. Но когда пишет только один, а другие читают, это тоже гонка (а гонка - UB). Вот две выдержки из стандарта: - Two expression evaluations conflict if one of them modifies a memory location and the other one reads or modifies the same memory location. - The execution of a program contains a data race if it contains two potentially concurrent conflicting actions, at least one of which is not atomic, and neither happens before the other, except for the special case for signal handlers described below. Any such data race results in undefined behavior.

d7d1cd
Те люди говорили что-то типа: единственный негатив...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

d7d1cd
Те люди говорили что-то типа: единственный негатив...

> единственный негативный эффект, который мы можем получить - это чтение предыдущего значения, а не нового из той переменной. чтобы получить такую семантику, надо использовать атомики и std::memory_order::relaxed

Mikail Bagishov
> единственный негативный эффект, который мы можем...

даже с другими ордерингами такое вполне возможно

Rustam
даже с другими ордерингами такое вполне возможно

ну да, но это уже в какой-то степени философия начинается

d7d1cd- Автор вопроса
Anatoly Shirokov
Разгоняй эту банду оптимистов

Пытаюсь доказать все выдержками из стандарта.

d7d1cd
Пытаюсь доказать все выдержками из стандарта.

Иногда лучше сразу переходить к оскорблениям

d7d1cd- Автор вопроса
Anatoly Shirokov
Разгоняй эту банду оптимистов

А вообще там есть не паханое поле: многопоточная либа почти вся на валатайл синхронизации 😁

d7d1cd- Автор вопроса
Anatoly Shirokov
Эка тебя занесло

Ну та либа стара как какашки мамонта.

Anatoly Shirokov
Иногда лучше сразу переходить к оскорблениям

"Переубедить вас мне не удастся, поэтому сразу перейду к оскорблениям" ?)

Anatoly Shirokov
Иногда лучше сразу переходить к оскорблениям

вы тоже играли в доту? Опыт доказывает обратное

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта