Tenga en cuenta la situación siguiente. Tenemos una función de C++ con una variable local estática:¿Cómo abordar la seguridad de subprocesos de los datos de servicio utilizados para mantener variables locales estáticas en C++?
void function()
{
static int variable = obtain();
//blahblablah
}
la función tiene que ser llamado desde varios subprocesos Al mismo tiempo, por lo que añadir una sección crítica para evitar el acceso simultáneo a nivel local estática:
void functionThreadSafe()
{
CriticalSectionLockClass lock(criticalSection);
static int variable = obtain();
//blahblablah
}
pero ¿será esto suficiente? Quiero decir que hay algo mágico que hace que la variable se inicialice no más de una vez. Así que hay algunos datos de servicio mantenidos por el tiempo de ejecución que indican si cada local estática ya se ha inicializado.
¿La sección crítica del código anterior también protege los datos del servicio? ¿Se requiere protección adicional para este escenario?
En cuanto a 'gcc' ha habido esta respuesta: http://stackoverflow.com/questions/1270927/are-function-static-variables-thread-safe-in-gcc –