¿Cómo puedo implementar el contador ABA con c ++ 11 CAS?

Estoy implementando una cola sin bloqueo basada en estoalgoritmo, que usa un contador para resolver el problema ABA. Pero no sé cómo implementar este contador con c ++ 11 CAS. Por ejemplo, desde el algoritmo:

E9:    if CAS(&tail.ptr->next, next, <node, next.count+1>)

Es una operación atómica, lo que significa que sitail.ptr->next es igual anext, dejartail.ptr->next apunta anode ysimultáneamente (atómicamente) hacernext.count+1. Sin embargo, usando C ++ 11 CAS, solo puedo implementar:

std::atomic_compare_exchange_weak(&tail.ptr->next, next, node);

que no puede hacernext.count+1 suceder simultáneamente

Respuestas a la pregunta(1)

Su respuesta a la pregunta