unsafe.compareAndSwapInt первый аргумент menanig

Я расследую java.util.concurrent.locks.AbstractQueuedSynchronizerисходный код.

Из нескольких мест вызывает compareAndSetState метод.

/**
 * Atomically sets synchronization state to the given updated
 * value if the current state value equals the expected value.
 * This operation has memory semantics of a {@code volatile} read
 * and write.
 *
 * @param expect the expected value
 * @param update the new value
 * @return {@code true} if successful. False return indicates that the actual
 *         value was not equal to the expected value.
 */
protected final boolean compareAndSetState(int expect, int update) {
    // See below for intrinsics setup to support this
    return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}

параметры expect а также update очевидны и соответствуют параметрам атомности. Но this это объект (а не int).
Как это соотносится с ожидаемым?

1 ответ

Это тот случай, чье поле state будет CAS-ред. Значение сохраняется в этом поле. Пара экземпляр-смещение - это способ преобразования дескриптора поля в адрес памяти, точно так же, как вы должны указать экземпляр при использовании Field::set, Field::get или же Method::invoke,

Кстати, источник этих классов Солнца доступен онлайн в ртутном репозитории openjdk.

Другие вопросы по тегам