Выбор ответа Senior Потоки и синхронизация обновлено

Что даёт volatile

Вопрос

Что гарантирует модификатор volatile у поля?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтения и записи не переупорядочиваются (acquire/release). volatile ограничивает переупорядочивание: чтение получает семантику acquire, запись release, и компилятор с JIT не держат значение в регистре.

Варианты ответа

  1. Атомарность операций ++ и += над полем без блокировок
  2. Взаимное исключение для потоков, как у оператора lock
  3. Что поле всегда хранится в оперативной памяти, а не в кеше процессора
  4. Чтения и записи не переупорядочиваются (acquire/release)правильный ответ

Разбор

volatile ограничивает переупорядочивание: чтение получает семантику acquire, запись release, и компилятор с JIT не держат значение в регистре. Это решает задачу «флаг остановки, который поток должен увидеть». Составные операции вроде ++ он атомарными не делает, взаимного исключения не даёт. Про кеш процессора формулировка неверна: кеши когерентны, проблема в переупорядочивании и оптимизациях компилятора.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме