Eine häufig diskutierte Frage in C ist die Thread-Sicherheit der Initialisierung lokaler statischer Variablen, wie z folgender Code:
Logger& g_logger() { static Logger lg; return lg; }
Im C 11-Standard wurde das Verhalten solcher Initialisierungen finalisiert und es ist nun garantiert Thread-sicher. Abschnitt 6.7 des Standards legt fest, dass „eine solche Variable initialisiert wird, wenn die Steuerung zum ersten Mal ihre Deklaration durchläuft“ und dass „die gleichzeitige Ausführung auf den Abschluss der Initialisierung warten soll“. Darüber hinaus stellt eine Fußnote zur Implementierung klar: „Die Implementierung darf keinen Deadlock bei der Ausführung des Initialisierers verursachen.“
Die wichtigsten Compiler (gcc 4.7, vc 2011 und clang 3.0) haben die überarbeiteten Thread-Sicherheitsanforderungen korrekt umgesetzt. Dies bedeutet, dass der Konstruktor für die Variable lg nur einmal ausgeführt wird, selbst wenn gleichzeitig Threads vorhanden sind.
Beachten Sie, dass diese Garantie nur für die Initialisierung selbst gilt. Der spätere Zugriff auf die Variable über die Referenz ist nicht unbedingt threadsicher.
Das obige ist der detaillierte Inhalt vonIst die Initialisierung lokaler statischer C 11-Variablen garantiert threadsicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!