Рассмотрим эти два варианта:
std::atomic<int> a;
a = 1;
int b = a;
а также
std::atomic<int> a;
a.store(1);
int b = a.load();
Из документации видно, что второй полностью атомарный, но я не понимаю, когда мне следует использовать, в чем и в чем разница в деталях.
Эти два примера эквивалентны; operator=
а также operator T
определены как эквивалентные вызову store
а также load
соответственно со значением по умолчанию для memory_order
аргумент.
Если вы довольны этим значением по умолчанию, memory_order_seq_cst
, так что каждый доступ действует как ограничитель памяти, а затем используйте то, что вам больше нравится. Если вы хотите указать другое значение, вам нужно использовать функции, поскольку операторы не могут принять второй аргумент.