Это , а не бесконечный цикл, это хорошая практика при работе с алгоритмом TAS (тестирование и настройка).Цикл делает (а) чтение из памяти (должна быть изменчивая семантика) (б) вычисление нового значения (в) запись нового значения , если старое значение не изменилось за это время .
В базе данных это называется оптимистической блокировкой.Он использует тот факт, что большинство одновременных обновлений в совместно используемой памяти не требуются, и в этом случае это самый дешевый из возможных способов сделать это.
Фактически, это в основном то, что беспристрастная блокировка будет делать в неконтролируемойдело.Он будет читать значение блокировки, и если он разблокирован, он будет делать CAS идентификатора потока, и, если это успешно, блокировка теперь удерживается.Если это не удается, кто-то еще получил блокировку первым.Блокировки, однако, обрабатывают случай сбоя гораздо более изощренным способом, чем просто повторение операции снова и снова.Некоторое время они будут читать его, если блокировка быстро разблокируется (спин-блокировка), а затем, как правило, засыпают, чтобы пропустить другие потоки до их поворота (экспоненциальное отключение).