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.