Initialisierung lokaler statischer Variablen in C 11: Thread-Sicherheit
Frage:
In C 11: Läuft der Konstruktor einer statischen lokalen Variablen wie der im folgenden Beispiel genau einmal, auch im Multithread-Modus? Szenarien?
Logger& g_logger() { static Logger lg; return lg; }
Antwort:
Gemäß dem C 11-Standard in Abschnitt 6.7 wird eine statische lokale Variable initialisiert, wenn die Steuerung zum ersten Mal ihre Deklaration durchläuft. Diese Initialisierung muss abgeschlossen sein, bevor eine gleichzeitige Ausführung fortgesetzt werden kann. Darüber hinaus ist es der Implementierung untersagt, während dieser Initialisierung einen Deadlock zu verursachen.
Compiler-Implementierungen:
Aktuelle Versionen beliebter Compiler, einschließlich gcc 4.7, vc 2011 und clang 3.0, implementieren Sie dieses Thread-sichere Verhalten ordnungsgemäß. Daher können Sie sicher sein, dass die lokale statische Variable nur einmal initialisiert wird, was den korrekten Betrieb in Multithread-Szenarien gewährleistet.
Zusätzliche Hinweise:
Das ist es Es ist wichtig zu beachten, dass die Initialisierung der statischen lokalen Variablen zwar threadsicher ist, der nachfolgende Zugriff auf die Variable über eine Referenz wie lg jedoch möglicherweise nicht threadsicher ist, es sei denn, es werden zusätzliche Synchronisierungsmaßnahmen ergriffen implementiert.
Das obige ist der detaillierte Inhalt vonIst die statische lokale Variableninitialisierung von C 11 threadsicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!