В чем разница между явной атомарной загрузкой / хранением и обычным оператором = и оператором T?

Рассмотрим эти два варианта:

std::atomic<int> a;
a = 1;
int b = a;

а также

std::atomic<int> a;
a.store(1);
int b = a.load();

Из документации видно, что второй полностью атомарный, но я не понимаю, когда мне следует использовать, в чем и в чем разница в деталях.

16

Решение

Эти два примера эквивалентны; operator= а также operator T определены как эквивалентные вызову store а также load соответственно со значением по умолчанию для memory_order аргумент.

Если вы довольны этим значением по умолчанию, memory_order_seq_cst, так что каждый доступ действует как ограничитель памяти, а затем используйте то, что вам больше нравится. Если вы хотите указать другое значение, вам нужно использовать функции, поскольку операторы не могут принять второй аргумент.

19

Другие решения


По вопросам рекламы [email protected]