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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage