Простой ответ: нет, не совсем.
Хотя вы можете использовать CAS для реализации атомарных операций, в большинстве случаев вам придется перепроектировать часть реализации, чтобы сделать это, и в большинстве случаев вы будете влиять на производительность во всех случаях.
Рассмотрим текущую реализацию вектора в g ++. Он содержит три указателя: begin
, end
, end_of_capacity
. Как бы вы сделали swap
атомным для такого вектора? Вы можете упростить ситуацию, поместив все три указателя в динамически распределенный блок памяти, а затем реализовать атомарный swap
будет проще, просто поменяйте местами указатели. Проблема заключается в том, что вы добавили дополнительное выделение памяти для контейнера и дополнительную операцию разыменования при каждом доступе через контейнер (итераторы будут работать аналогично исходной реализации).
Прочитайте на этом ответ от FredOverflow для простого объяснения семантики перемещения .