Как java AtomicReference работает под капотом


Как java AtomicReference работает под капотом? Я попытался Просмотреть код, но он основан на sun.разное.Небезопасно поэтому, вероятно, другой вопрос, как работает небезопасно?

2 3

2 ответа:

это специфично для текущей реализации и может изменяться, но не обязательно документы

Как java AtomicReference работает под капотом

Есть две операции. Одиночное чтение / запись или атомарные свопы.
  1. однократное чтение / запись являются простыми volatile загрузками или хранилищами.
  2. Атомарные свопы нуждаются в инструкциях уровня процессора. Наиболее распространенными реализациями являются Compare and Swap (CAS), найденные на sparc-TSO, x86, ia64 и LL / SC найдено на arm, ppc и alpha. Я уверен, что есть еще что-то, что я упускаю, но это дает вам представление о масштабах.

Другой вопрос, как работает небезопасный?

Небезопасные работы с помощью собственных методов, использующих инструкции процессора.

Источники:

Http://gee.cs.oswego.edu/dl/jmm/cookbook.html

AtomicReference имеет два поля: -
* значение, которое является эталоном * valueOffset, который является позицией значения в байтах от "this", то есть атомарной связью
В compareAndSwap(ожидается, обновленная), объект при этом-расположение + valueOffset сравниваются через == семантика с "ожидается", а если ==, то обновляться с "обновленными".
Это единственная аппаратная инструкция, и таким образом гарантируется обновление или сбой с ложным возвратом атомарно.
Чтение небезопасного исходного кода из openJDK.