Как я могу реализовать счетчик ABA с C ++ 11 CAS?
Я реализую очередь без блокировки на основе этогоалгоритм, который использует счетчик для решения проблемы 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
одновременно случиться.