Como posso implementar o contador ABA com c ++ 11 CAS?

Estou implementando uma fila sem bloqueio com base nestealgoritmo, que usa um contador para resolver o problema ABA. Mas não sei como implementar esse contador com c ++ 11 CAS. Por exemplo, no algoritmo:

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

É uma operação atômica, significando setail.ptr->next é igual anext, deixeitail.ptr->next aponta paranode esimultaneamente (atomicamente) façonext.count+1. No entanto, usando o C ++ 11 CAS, só posso implementar:

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

que não pode fazernext.count+1 acontecer simultaneamente.

questionAnswers(1)

yourAnswerToTheQuestion