Wie kann ich ABA Counter mit c ++ 11 CAS implementieren?
Ich implementiere eine sperrfreie Warteschlange basierend auf diesemAlgorithmu, das einen Zähler verwendet, um das ABA-Problem zu lösen. Ich weiß aber nicht, wie ich diesen Zähler mit c ++ 11 CAS implementieren soll. Zum Beispiel aus dem Algorithmus:
E9: if CAS(&tail.ptr->next, next, <node, next.count+1>)
It ist eine atomare Operation, dh, wenntail.ptr->next
entsprichtnext
, Lassentail.ptr->next
zeigen aufnode
und gleichzeitig (atomar) machennext.count+1
. Mit C ++ 11 CAS kann ich jedoch nur Folgendes implementieren:
std::atomic_compare_exchange_weak(&tail.ptr->next, next, node);
was kann nicht machennext.count+1
gleichzeitig passieren.