Thread-Sicherheit der Singleton-Musterimplementierung von Meyers
Diese Implementierung des Singleton-Musters von Meyers mit verzögerter Initialisierung wirft Fragen zur Thread-Sicherheit auf.
Meyers' Singleton-Implementierung
Die Der bereitgestellte Code für das Singleton-Muster lautet wie folgt:
static Singleton& instance() { static Singleton s; return s; }
Thread-Sicherheitsanalyse
In C 11 ist diese Implementierung aufgrund der Garantie in §6.7 threadsicher [stmt.dcl] p4:
"Wenn die Steuerung gleichzeitig in die Deklaration eintritt, während die Variable initialisiert wird, muss die gleichzeitige Ausführung warten für den Abschluss der Initialisierung.“
Compiler wie GCC (seit Version 4.3) und Visual Studio (seit 2015) unterstützen diese Funktion.
C 03-Implementierung
In C 03 war der Code nicht threadsicher. Meyers‘ Artikel „C and the Perils of Double-Checked Locking“ erörtert solche Bedenken. Um die Parallelität zu gewährleisten, wurde eine vollständige Sperrung rund um die Instanziierungsmethode empfohlen, während bei doppelt geprüften Sperrvarianten auf bestimmten Architekturen ohne Speicherbarrieren möglicherweise Race Conditions auftreten.
Das obige ist der detaillierte Inhalt vonIst das Singleton-Muster von Meyers in C 11 und höher threadsicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!