¿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