Considerare il seguente scenario. Abbiamo una funzione C++ con una variabile locale statica:Come affrontare la sicurezza dei thread dei dati del servizio utilizzati per il mantenimento delle variabili locali statiche in C++?
void function()
{
static int variable = obtain();
//blahblablah
}
la funzione deve essere chiamato da più thread simultaneamente, in modo da aggiungere una sezione critica per evitare l'accesso simultaneo al locale statico:
void functionThreadSafe()
{
CriticalSectionLockClass lock(criticalSection);
static int variable = obtain();
//blahblablah
}
ma sarà sufficiente? Voglio dire, c'è un po 'di magia che rende la variabile inizializzata non più di una volta. Pertanto, alcuni dati di servizio gestiti dal runtime indicano se ciascun locale statico è già stato inizializzato.
La sezione critica del codice precedente proteggerà anche i dati di servizio? È necessaria una protezione extra per questo scenario?
Per quanto riguarda 'gcc', c'è stata questa risposta: http://stackoverflow.com/questions/1270927/are-function-static-variables-thread-safe-in-gcc –