如何用c ++ 11 CAS实现ABA计数器?
我正在实现一个基于此算法的无锁队列,该算法使用计数器来解决ABA问题。但我不知道如何用c ++ 11 CAS实现这个计数器。例如,从算法:
E9: if CAS(&tail.ptr->next, next, <node, next.count+1>)
它是一个原子操作,意思是如果tail.ptr->next
等于next
,则tail.ptr->next
指向node
并同时(原子地)产生next.count+1
。但是,使用C ++ 11 CAS,我只能实现:
std::atomic_compare_exchange_weak(&tail.ptr->next, next, node);
这不可能next.count+1
同时发生。
相关分类