Как weakCompareAndSet может перестать работать побочно, если он реализован точно как compareAndSet?

(обратите внимание, что этот вопрос не о CAS, это о, "Может привести к сбою побочно" Javadoc).

Единственная разница в Javadoc между этими двумя методами от AtomicInteger класс - то, что weakCompareAndSet содержит комментарий: "Может перестать работать побочно".

Теперь, если мои глаза не обмануты некоторым написанием, оба метода действительно надеются сделать точно то же:

public final boolean compareAndSet(int expect, int update) {
  return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

/* ...
 * May fail spuriously.
 */
public final boolean weakCompareAndSet(int expect, int update) {
  return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

Таким образом, я понимаю это, май не означает, "Должен", но затем почему не делают все мы начинаем добавлять это к нашей кодовой базе:

public void doIt() {
    a();
}

/**
 * May fail spuriously
 */
public void weakDoIt() {
    a();
}

Я действительно перепутан с этим weakCompareAndSet (), который, кажется, делает то же как compareAndSet () все же, который "может привести к сбою побочно", в то время как другой не может.

По-видимому, "слабое" и "побочный сбой" способом связаны с, "происходит - перед" упорядочиванием, но я все еще очень смущен этими двумя AtomicInteger (и AtomicLong и т.д.) методы: потому что, по-видимому, они называют точно тот же unsafe.compareAndSwapInt метод.

Я особенно смущен в этом AtomicInteger был представлен в Java 1.5, поэтому после изменения Модели памяти Java (таким образом, это - очевидно, не что-то, что могло "перестать работать побочно в 1,4", но чье поведение, измененное на ", не должно перестать работать побочно в 1,5").

44
задан Ciro Santilli 新疆改造中心法轮功六四事件 16 June 2015 в 14:03
поделиться

1 ответ

Существует разница между реализацией и спецификацией...

В то время как в конкретной реализации может не быть особого смысла в предоставлении различных реализаций, будущие реализации, возможно, на другом оборудовании, могут захотеть этого. Имеет ли этот метод вес в API - вопрос спорный.

Также слабые методы не имеют определенного happens-before упорядочивания. Неслабые версии ведут себя как volatile поля.

19
ответ дан 26 November 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: