Различия заключаются в гарантиях атомарности и в возможности ложного провала операции.
compareAndSwap
(теперь переименован в compareAndSet
в последних версиях Java) гарантирует атомарность операции: если текущее значение равно ожидаемому, оно будет атомарно установлено в новое значение. Операция не может ложно провалиться из-за внутренних факторов (например, оптимизаций процессора или компилятора), только если фактическое значение не равно ожидаемому.
weakCompareAndSet
не предоставляет таких строгих гарантий атомарности. Он может ложно провалиться (вернуть false
), даже если фактическое значение равно ожидаемому. Это может произойти из-за оптимизаций процессора, которые переупорядочивают инструкции. Однако, если операция успешна (возвращает true
), она была атомарной.
В большинстве сценариев compareAndSet
является предпочтительным, если требуется абсолют
Различия заключаются в гарантиях атомарности и в возможности ложного провала операции.
compareAndSwap
(теперь переименован в compareAndSet
в последних версиях Java) гарантирует атомарность операции: если текущее значение равно ожидаемому, оно будет атомарно установлено в новое значение. Операция не может ложно провалиться из-за внутренних факторов (например, оптимизаций процессора или компилятора), только если фактическое значение не равно ожидаемому.
weakCompareAndSet
не предоставляет таких строгих гарантий атомарности. Он может ложно провалиться (вернуть false
), даже если фактическое значение равно ожидаемому. Это может произойти из-за оптимизаций процессора, которые переупорядочивают инструкции. Однако, если операция успешна (возвращает true
), она была атомарной.
В большинстве сценариев compareAndSet
является предпочтительным, если требуется абсолют
Register or sign in to get access to full answers for all questions from the question bank.