sig_atomic_t
no es un tipo de datos atómico. Es solo el tipo de datos que puede usar en el contexto de un controlador de señales, eso es todo. Así que mejor lea el nombre como "atómico en relación con el manejo de señales".
Para garantizar la comunicación con y desde un controlador de señales, solo se necesita una de las propiedades de los tipos de datos atómicos, a saber, el hecho de que la lectura y la actualización siempre verán un valor constante. Otros tipos de datos (como quizás long long
) podría escribirse con varias instrucciones de ensamblador para la parte inferior y superior, p. sig_atomic_t
se garantiza que se leerá y escribirá de una sola vez.
Entonces, una plataforma puede elegir cualquier tipo de base de entero como sig_atomic_t
por lo que puede garantizar que volatile sig_atomic_t
se puede utilizar de forma segura en los controladores de señal. Muchas plataformas eligieron int
por esto, porque saben que para ellos int
se escribe con una sola instrucción.
El último estándar C, C11, tiene tipos atómicos, pero que son algo completamente diferente. Algunos de ellos (aquellos que son "sin bloqueo") también pueden usarse en controladores de señales, pero esa es una historia completamente diferente.
Tenga en cuenta que sig_atomic_t
no es seguro para subprocesos, solo seguro para señales asíncronas.
La atómica implica dos tipos de barreras:
- Barrera del compilador. Se asegura de que el compilador no reordene las lecturas/escrituras de/a una variable atómica en relación con las lecturas y escrituras de otras variables. Esto es lo que
volatile
la palabra clave lo hace. - Barrera de CPU y visibilidad. Se asegura de que la CPU no reordene las lecturas y escrituras. En x86, todas las cargas y almacenamientos en almacenamiento alineado de 1, 2, 4 y 8 bytes son atómicos. La visibilidad asegura que las tiendas sean visibles para otros subprocesos. Nuevamente, en las CPU Intel, las tiendas son visibles inmediatamente para otros subprocesos debido a la coherencia de caché y el protocolo de coherencia de memoria MESI. Pero eso puede cambiar en el futuro. Consulte §8.1 OPERACIONES ATÓMICAS BLOQUEADAS en el Volumen 3A del Manual del desarrollador de software de las arquitecturas Intel® 64 e IA-32 para obtener más detalles.
Para un tratamiento completo del tema, vea Armas atómicas:el modelo de memoria C++ y el hardware moderno.