Я внедряю очередь без блокировки на основе этого алгоритма, который использует счетчик для решения проблемы ABA. Но я не знаю, как реализовать этот счетчик с помощью C ++ 11 CAS. Например, из алгоритма: < /p>
Это атомная операция, означающая, что tail.ptr-> next равна следующему , пусть tail.ptr-> next указывать на Node и
одновременно (атомально) ate.count+1 . Однако, используя C ++ 11 CAS, я могу только реализовать: < /p>
std::atomic_compare_exchange_weak(&tail.ptr->next, next, node);
< /code>
, который не может сделать следующее.count+1 < /code> одновременно.
Подробнее здесь:
https://stackoverflow.com/questions/389 ... th-c11-cas