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

Ну раз аж так сильно тема развиться смогла: насчёт volatile

на все поля - это же не спасает от аномалий с неатомарными операциями в стиле ++ например, там уже нужно объявление synchronized (ну или понятное дело обётки из спец библиотеки). Или вот тут у меня срабатывает поверхностное понимание проблемы и всё не так?
Ну то есть волатайл гарантирует атомарную запись и чтение и это ок. Но операции инкремента и декремента посредством ++ — работают по иному вроде, и тут нам не поможет волатаил на все поля как мне кажется, но я уже и тут сомневаться начал

6 ответов

33 просмотра

На ++ и -- надо использовать cas based примитивы: AtomicLong и ко. Это дешевле чем локи/sychnronized

Dmitriy-Fomin Автор вопроса
Gerr Mes
На ++ и -- надо использовать cas based примитивы: ...

я так и написал, только обозвал их обёртками. Главно что волатайла тут не хватит

Ага, даже SC-DRF не гарантирует, что багов не будет. Простой инкремент будет 2 операциями (чтение и запись в volatile-семантике), со всеми идущими из этого последствиями

Gerr Mes
На ++ и -- надо использовать cas based примитивы: ...

Имхо, лучше VarHandle заиспользовать для volatile поля, особенно если внезапно потребовалось

Aleksander Lantsov
Ага, даже SC-DRF не гарантирует, что багов не буде...

Простой getAndIncrement или incrementAndGet по факту это будет одна инструкция lock add на x86_64

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта