ABA проблема: поток 1 читает A, засыпает. Поток 2 меняет A→B→A. Поток 1 просыпается, CAS видит A и успешно заменяет — но состояние уже другое (было A, стало B, снова A). Пример: lock-free stack, узел удалили и добавили обратно — CAS пройдёт, но структура может быть сломана. Решения: tagged pointer (счётчик версии + указатель), hazard pointers, epoch-based reclamation. В Go с GC проблема менее острая — объекты не переиспользуются по тому же адресу. Но знать стоит.
Что такое ABA problem?
Senior
187 просмотровAFK Offer AI
Что выведет: var wg sync.WaitGroup; for i := 0; i < 3; i++ { wg.Add(1); go func() { defer wg.Done(); fmt.Println(i) }() }; wg.Wait()?