Heim >Backend-Entwicklung >C++ >Ist die Initialisierung lokaler statischer C 11-Variablen garantiert threadsicher?

Ist die Initialisierung lokaler statischer C 11-Variablen garantiert threadsicher?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 06:45:10812Durchsuche

Is C  11 Local Static Variable Initialization Guaranteed to be Thread-Safe?

Garantierte Thread-sichere Initialisierung lokaler statischer Variablen in C 11

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;
}

C 11 Standard und Thread Safety

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.“

Compiler-Implementierung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn