Спецификация Java 11: 17.7. Неатомарная обработка double и long
В рамках модели памяти языка программирования Java одна запись в не-volatile long или double значение рассматривается как две отдельные записи: по одной в каждую 32-битную половину. Это может привести к ситуации, когда поток видит первые 32 бита 64-битного значения при одной записи, а вторые 32 бита - при другой записи.
Запись и чтение volatile long и double значений всегда атомарны.
Запись и чтение ссылок всегда атомарны, независимо от того, реализованы ли они как 32-битные или 64-битные значения.
В некоторых реализациях может оказаться удобным разделить одно действие записи для 64-битного long или double значения на два действия записи для смежных 32-битных значений. Для повышения эффективности это поведение зависит от реализации; реализация виртуальной машины Java может выполнять запись в long и double значения атомарно или в двух частях.
Реализациям виртуальной машины Java рекомендуется избегать разделения 64-битных значений, где это возможно. Программистам рекомендуется объявлять общие 64-битные значения как изменчивые или правильно синхронизировать свои программы, чтобы избежать возможных осложнений.
Читайте также:
- Спецификация Java 11: 17.5. Семантика final полей
- Спецификация Java 11: 17.5. Чтение, изменение final полей
- Спецификация Java 11: 17.6. Разрыв слова
Комментарии
Отправить комментарий