После просмотра ссылки @ Treebeard https://www.youtube.com/watch?v=ZQFzMfHIxng (смотрите соответствующую информацию минут 13-15)
Любая операция, выполняемая с атомарной переменной, является атомарной.Однако одна и та же строка может содержать более одной операции.
Так, например, с учетом следующего кода:
int a = 1;
int b=1;
auto c = std::atomic<int>(0);
c = a + b;
последняя строка не является атомарной операцией, поскольку a + b сама по себеatomic, operator = сам по себе атомарный.Однако вместе они составляют 2 операции, которые вместе не являются атомарными.В заключение, я бы рекомендовал использовать явные функции шаблона, такие как load (), fetch_add () и store (), вместо использования стандартных перегруженных операторов, поскольку они могут гарантированно выполняться атомарно.