Что такое ABA problem?

Senior
99 просмотров
AFK Offer AI

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 проблема менее острая — объекты не переиспользуются по тому же адресу. Но знать стоит.

Следующий вопрос

Как ты обеспечиваешь backward compatibility при изменениях API?