varia tabla son que propiedades periodica numero nuclear neutro las ejemplo efectiva como carga caracteristicas atomo atomico atomicas c++ c++11 atomic

c++ - tabla - numero atomico



¿Debo llamar carga atómica/almacenar explícitamente? (2)

C ++ 11 introdujo la biblioteca std::atomic<> template. El estándar especifica las operaciones store() y load() para establecer atómicamente / obtener una variable compartida por más de un hilo.

Mi pregunta es: ¿las operaciones de asignación y acceso también son atómicas?

A saber, es:

std::atomic<bool> stop(false); ... void thread_1_run_until_stopped() { if(!stop.load()) /* do stuff */ } void thread_2_set_stop() { stop.store(true); }

Equivalente a:

void thread_1_run_until_stopped() { if(!stop) /* do stuff */ } void thread_2_set_stop() { stop = true; }


¿Las operaciones de asignación y acceso para tipos que no son de referencia también son atómicas?

Sí lo son. atomic<T>::operator T y atomic<T>::operator= son equivalentes a atomic<T>::load y atomic<T>::store respectivamente. Todos los operadores se implementan en la clase atómica de modo que usarán operaciones atómicas como era de esperar.

No estoy seguro de lo que quieres decir con respecto a los tipos de "no referencia". No estoy seguro de cómo los tipos de referencia son relevantes aquí.


Puede hacer ambas cosas, pero la ventaja de load() / store() es que permiten especificar el orden de la memoria. A veces es importante para el rendimiento, donde puede especificar std::memory_order_relaxed mientras que atomic<T>::operator T y atomic<T>::operator= usarían el std::memory_order_seq_cst más seguro y lento. A veces es importante para la corrección y la legibilidad de su código: aunque el std::memory_order_seq_cst predeterminado es más seguro, por lo tanto, es más probable que sea correcto, no está claro para el lector qué tipo de operación (adquirir / liberar / consumir) está haciendo, o si está haciendo tal operación en absoluto (para responder: ¿no hay suficiente orden relajada aquí?).