Вопросы с тегом «volatile»

Volatile - это квалификатор, используемый для определения области хранения данных (объекта, поля, переменной, параметра), которая «может изменяться сама по себе», таким образом запрещая некоторые оптимизации генератора кода. В некоторых, но не во всех языках, которые распознают этот квалификатор, доступ к таким данным является потокобезопасным.

673
Какое ключевое слово volatile полезно для

На работе сегодня я наткнулся на volatileключевое слово в Java. Не очень знакомый с этим, я нашел это объяснение: Теория и практика Java: управление волатильностью Учитывая детали, в которых эта статья объясняет данное ключевое слово, вы когда-нибудь использовали его или могли когда-нибудь увидеть...

672
Летучий против Блокированный против блокировки

Допустим, у класса есть public int counterполе, доступ к которому осуществляется несколькими потоками. Это intтолько увеличивается или уменьшается. Чтобы увеличить это поле, какой подход следует использовать и почему? lock(this.locker) this.counter++;, Interlocked.Increment(ref this.counter);,...

297
В чем разница между атомарным / энергозависимым / синхронизированным?

Как атомарные / энергозависимые / синхронизированные работают внутри? В чем разница между следующими блоками кода? Код 1 private int counter; public int getNextUniqueIndex() { return counter++; } Код 2 private AtomicInteger counter; public int getNextUniqueIndex() { return...

265
Volatile против статики в Java

Правильно ли говорить, что это staticозначает одну копию значения для всех объектов и volatileозначает одну копию значения для всех потоков? В любом случае, staticзначение переменной также будет одним значением для всех потоков, тогда зачем нам идти...

233
Разница между изменчивым и синхронизированным в Java

Меня интересует разница между объявлением переменной как volatile и всегда доступ к переменной в synchronized(this)блоке в Java? По этой статье http://www.javamex.com/tutorials/synchronization_volatile.shtml многое можно сказать и есть много различий, но также есть и некоторые сходства. Я особенно...

165
Почему volatile не считается полезным в многопоточном программировании на C или C ++?

Как показано в этом ответе, который я недавно опубликовал, мне кажется, что я не совсем понимаю полезность (или ее отсутствие) volatileмногопоточного программирования. Насколько я понимаю, в любой момент, когда переменная может быть изменена вне потока контроля фрагмента кода, обращающегося к ней,...

131
Когда использовать volatile с многопоточностью?

Если есть два потока, обращающихся к глобальной переменной, то во многих руководствах говорится, что переменная должна быть изменчивой, чтобы компилятор не кэшировал переменную в регистре и, таким образом, не обновлялся правильно. Однако два потока, оба обращающиеся к общей переменной, - это то,...

130
Для чего используется ключевое слово «volatile»?

На этот вопрос есть ответы на Stack Overflow на русском : Ключевое слово volatile в Java Я читал несколько статей о volatileключевом слове, но не мог понять, как правильно его использовать. Подскажите, пожалуйста, для чего его использовать в C # и...

111
Неустойчивый дорогой?

Прочитав «Поваренную книгу JSR-133 для разработчиков компиляторов» о реализации volatile, особенно в разделе «Взаимодействие с атомарными командами», я предполагаю, что для чтения изменчивой переменной без ее обновления требуется барьер LoadLoad или LoadStore. Далее по странице я вижу, что LoadLoad...

88
Иллюстрация использования ключевого слова volatile в C #

Я хотел бы написать небольшую программу, которая наглядно иллюстрирует поведение volatileключевого слова. В идеале это должна быть программа, которая выполняет одновременный доступ к энергонезависимому статическому полю и из-за этого ведет себя некорректно. Добавление ключевого слова volatile в ту...

86
Вводит ли ключевое слово volatile в C ++ забор памяти?

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

85
изменчивый и изменчивый в C ++

У меня вопрос о разнице между изменчивым и изменчивым. Я заметил, что оба значения означают, что это можно изменить. Что еще? Это одно и то же? Какая разница? Где они применимы? Почему предлагаются две идеи? Как их использовать по-другому? Большое спасибо....

85
Необходимость в модификаторе volatile при блокировке с двойной проверкой в ​​.NET

В нескольких текстах говорится, что при реализации блокировки с двойной проверкой в ​​.NET к блокируемому полю должен применяться модификатор volatile. Но почему именно? Рассмотрим следующий пример: public sealed class Singleton { private static volatile Singleton instance; private static object...

79
Разрешено ли компилятору оптимизировать локальную изменчивую переменную?

Разрешено ли компилятору оптимизировать это (согласно стандарту C ++ 17): int fn() { volatile int x = 0; return x; } к этому? int fn() { return 0; } Если да, то почему? Если нет, то почему? Вот некоторые размышления по этому поводу: текущие компиляторы компилируются fn()как локальная переменная,...

25
Разрешено ли компилятору постоянно сворачивать локальную переменную?

Рассмотрим этот простой код: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Вы можете видеть , что ни gccни clangоптимизируют из потенциального вызова g. В моем понимании это правильно: абстрактная машина должна предполагать, что volatileпеременные могут...

12
Гарантирует ли «volatile» что-либо вообще в переносимом коде C для многоядерных систем?

После глядя на кучу из других вопросов и их ответов , я получаю впечатление , что не существует никакого широко распространенного соглашения о том , что «летучий» ключевое слово в C означает точно. Даже сам стандарт не достаточно ясен для того, чтобы все могли понять, что это значит . Среди других...