Nel codice esempioLe variabili statiche della funzione sono thread-safe in GCC?
void foo()
{
static Bar b;
...
}
compilato con GCC è garantito che b
verrà creato e inizializzato in modo thread-safe?
Nella pagina man di gcc, trovato il -fno-threadsafe-statica opzione della riga di comando:
Non emettere il codice aggiuntivo per utilizzare le routine specificate nella ++ ABI C per threadsafe inizializzazione della statica locale . È possibile utilizzare questa opzione per ridurre leggermente la dimensione del codice nel codice che non deve essere thread-safe.
significa, che statica locali sono thread-safe di default con GCC? Quindi nessuna ragione per porre protezioni esplicite per es. con
pthread_mutex_lock/unlock
?Come scrivere codice portatile: come verificare se il compilatore aggiungerà le proprie protezioni? O è meglio disattivare questa funzionalità di GCC?
quale utilizzo è inizializzato con thread-safe se non si dispone dell'accesso thread-safe (funzione locale)? – xtofl
Per inizializzare il mutex che userai per controllare l'accesso ad altre variabili. – AProgrammer
Se è necessario scrivere codice portatile, non è possibile fare affidamento sull'inizializzazione thread-safe delle statistiche delle funzioni. Ad esempio MS C++ non lo fa. Quindi non sono d'accordo sul punto 2 - puoi tranquillamente disabilitarlo, se vuoi scrivere codice portatile, ma non devi usare la funzione statica dove la sicurezza del thread è importante ;-) – hirschhornsalz