Карточка Middle sync и атомики обновлено

CompareAndSwap

Вопрос

Что делает CompareAndSwap(old, new) и где его используют?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

Атомарно: если текущее значение равно old, записать new и вернуть true, иначе ничего не менять и вернуть false. Основа lock-free алгоритмов: цикл «прочитал, посчитал, попытался CAS, повторил при неудаче».

Ответ

Атомарно: если текущее значение равно old, записать new и вернуть true, иначе ничего не менять и вернуть false. Основа lock-free алгоритмов: цикл «прочитал, посчитал, попытался CAS, повторил при неудаче».

Разбор

Пример: атомарно обновить максимум for { cur := v.Load(); if x <= cur || v.CompareAndSwap(cur, x) { break } }.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.