variable values bool c++ multithreading c++11 thread-safety atomic

c++ - values - diferencia entre el bool atómico estándar y la bandera atómica



boolean variable (2)

No estaba al tanto de las variables std::atomic , pero sí sobre el std::mutex (¡extraño derecho!) Provisto por el estándar; Sin embargo, una cosa llamó mi atención: hay dos tipos atómicos que parecen parecidos (para mí) proporcionados por el estándar, que se enumeran a continuación:

  1. std::atomic<bool> type

  2. std::atomic_flag type

También se menciona con el ejemplo de tipo std::atomic_flag type -

std :: atomic_flag es un tipo booleano atómico. A diferencia de todas las especializaciones de std :: atomic, se garantiza que está libre de bloqueo. A diferencia de std :: atomic, std :: atomic_flag no proporciona operaciones de carga o almacenamiento.

Lo cual no entiendo. ¿No se garantiza que el std::atomic bool type no tenga bloqueo? ¿Entonces no es atómico o qué?

Entonces, ¿cuál es la diferencia entre los dos y cuándo debo usar cuál?


std :: atomic bool tipo no garantizado para ser bloqueado?

Correcto. std::atomic puede implementarse utilizando bloqueos.

¿Entonces no es atómico o qué?

std::atomic es atómico, ya sea que se haya implementado mediante bloqueos o sin él. std::atomic_flag está garantizado para implementarse sin utilizar bloqueos.

Entonces, ¿cuál es la diferencia b / w dos

La principal diferencia además de la garantía de bloqueo es:

std::atomic_flag no proporciona operaciones de carga o almacenamiento.

y cuando debo usar cual?

Normalmente, querrá usar std::atomic<bool> cuando necesite una variable booleana atómica. std::atomic_flag es una estructura de bajo nivel que se puede usar para implementar estructuras atómicas personalizadas.


std::atomic<T> garantiza que los accesos a la variable serán atómicos. Sin embargo, no dice cómo se logra la atomicidad. Puede estar usando una variable sin bloqueo, o usando un bloqueo. La implementación real depende de su arquitectura de destino y del tipo T

std::atomic_flag por otra parte está garantizado para implementarse utilizando una técnica sin bloqueo.