Leksykon IT › Programowanie › Problem ABA

Problem ABA

Programowanie Svenska → Zaktualizowano: 2026-10-05

Wątek odczytuje wartość A, zostaje wywłaszczony, a gdy wraca, wartość znów wynosi A — lecz w międzyczasie była B i świat nie jest już taki sam.

To klasyczna pułapka programowania bezblokadowego. Compare-and-swap porównuje tylko wartość, nie historię, więc operacja się udaje, a wątek sądzi, że nic się nie stało. W bezblokadowym stosie wygląda to tak: wątek czyta wierzchołek, inny wątek zdejmuje ten węzeł, zwalnia pamięć, alokuje nowy węzeł, który trafia pod ten sam adres, i wkłada go na stos. CAS pierwszego wątku widzi ten sam wskaźnik, kończy się sukcesem i podpina następnika, który już nie istnieje. Obrona to albo wskaźnik z tagiem, którego licznik wersji rośnie przy każdym zapisie i jest porównywany w tej samej operacji, albo odroczenie ponownego użycia pamięci: hazard pointers, rekultywacja epokowa lub RCU.

← Wróć do leksykonu