Выбор ответа Senior Потоки и синхронизация обновлено
Что даёт volatile
Вопрос
Что гарантирует модификатор volatile у поля?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтения и записи не переупорядочиваются (acquire/release). volatile ограничивает переупорядочивание: чтение получает семантику acquire, запись release, и компилятор с JIT не держат значение в регистре.
Варианты ответа
- Атомарность операций
++и+=над полем без блокировок - Взаимное исключение для потоков, как у оператора
lock - Что поле всегда хранится в оперативной памяти, а не в кеше процессора
- Чтения и записи не переупорядочиваются (acquire/release)правильный ответ
Разбор
volatile ограничивает переупорядочивание: чтение получает семантику acquire, запись release, и компилятор с JIT не держат значение в регистре. Это решает задачу «флаг остановки, который поток должен увидеть». Составные операции вроде ++ он атомарными не делает, взаимного исключения не даёт. Про кеш процессора формулировка неверна: кеши когерентны, проблема в переупорядочивании и оптимизациях компилятора.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.