c++ - ¿Cuál es la diferencia entre carga/almacenamiento atómico explícito y operador habitual=y operador T?
c++11 stdatomic (1)
Considera estas dos variantes:
std::atomic<int> a;
a = 1;
int b = a;
y
std::atomic<int> a;
a.store(1);
int b = a.load();
Veo en la documentación que el segundo es completamente atómico, pero no entiendo cuándo debo usar cuál y cuál es la diferencia en detalle.
Esos dos ejemplos son equivalentes; operator=
y operator T
se definen para que sean equivalentes a la llamada al store
y la load
, respectivamente, con el valor predeterminado para el argumento memory_order
.
Si está satisfecho con ese valor predeterminado, memory_order_seq_cst
, para que cada acceso actúe como una valla de memoria, use el que le parezca más agradable. Si desea especificar un valor diferente, deberá usar las funciones, ya que los operadores no pueden aceptar un segundo argumento.