En el código de ejemplo¿Las variables estáticas de la función son seguras para subprocesos en GCC?
void foo()
{
static Bar b;
...
}
compilado con GCC es que garantiza que b
se crea e inicializa de manera thread-safe?
En página del manual de gcc, encontró el -fno-multi-hilo-estática opción de línea de comandos:
No emite el código extra para usar las rutinas especificados en el ABI de C++ para multi-hilo inicialización de la estática local . Puede usar esta opción para reducir el tamaño del código ligeramente en el código que no necesita ser seguro para subprocesos.
¿Quiere decir, que son estáticos locales flujos seguros por defecto con GCC? Entonces no hay razón para poner protección explícita, p. con
pthread_mutex_lock/unlock
?Cómo escribir código portable: cómo comprobar si el compilador agregará sus protecciones? ¿O es mejor desactivar esta característica de GCC?
¿para qué sirve la inicialización segura de subprocesos si no tiene acceso seguro a subprocesos (función local)? – xtofl
Para inicializar el mutex que usará para controlar el acceso a otras variables. – AProgrammer
Si tiene que escribir un código portátil, no puede confiar en la inicialización segura de la función de estática de la función. Por ejemplo, MS C++ no lo hace. Por lo tanto, no estoy de acuerdo con el punto 2: puede deshabilitarlo de manera segura, si desea escribir código portátil, pero no debe usar la función estática donde la seguridad de la secuencia es importante ;-) – hirschhornsalz