Что сравнивает Сравнение в CompareAndSwap в AtomicInteger.incrementAndGet ()? - PullRequest
0 голосов
/ 01 октября 2018

Я знаю, что CompareAndSwap используется под капотом таких методов, как AtomicInteger.incrementAndGet () в параллельной java, работает как бесконечный цикл, пока не завершится успешно и не заблокирует поток

Сравнивает содержимое памятиlocation с данным значением и, только если они одинаковы, изменяет содержимое этой памяти в новое заданное значение.Это делается как единая атомная операция.Атомность гарантирует, что новое значение рассчитывается на основе актуальной информации;если за это время значение было обновлено другим потоком, запись не удалась.Результат операции должен указывать, была ли выполнена замена;это может быть сделано либо с простым логическим ответом (этот вариант часто называется сравнением и установкой), либо путем возврата значения, считанного из ячейки памяти (а не значения, записанного в него).

Так что же это заданное значение и содержимого ячейки памяти в incrementAndGet ()?

1 Ответ

0 голосов
/ 01 октября 2018

Когда один поток видит текущее значение, например, 1, он увеличивает его до 2 как given value и сравнивает 2 с реальным значением в памяти в текущий момент.

В случае успеха 2 будет возвращено.

В противном случае он извлечет самое новое значение, скажем, x, и увеличит до x + 1 как заданное значение.

...

Эта процедура будетпродолжить до успешного сравнения.

...