Ist das Singleton-Design von Meyers threadsicher?
Die vorgestellte Implementierung des Singleton-Musters von Meyers unter Verwendung einer verzögerten Initialisierung wirft die Frage auf Thread-Sicherheit. Hier ist eine Analyse, warum dieser Code in C 11 Thread-sicher ist und wie er Thread-Sicherheit erreicht.
Thread-Sicherheit in C 11
Gemäß dem C 11-Standard , §6.7 [stmt.dcl] p4:
If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.
Dies impliziert, dass in C 11 wird die obige Implementierung threadsicher. Der Standard verlangt, dass die Thread-Ausführung auf den Abschluss der Initialisierung wartet, bevor auf die Variable zugegriffen wird, um die Thread-Sicherheit zu gewährleisten.
Unterstützung in Compilern
Die folgenden Compiler bieten Unterstützung für die dynamische Initialisierung und Zerstörung mit Parallelität, die diese Funktion ermöglicht:
Hinweis für C 03
In C 03 war der Code nicht threadsicher. Meyers schlägt in seinem Artikel „C and the Perils of Double-Checked Locking“ vor, dass in C 03 die vollständige Sperrung rund um die Instanziierungsmethode der einfachste Weg ist, Thread-Sicherheit plattformübergreifend zu gewährleisten.
Das obige ist der detaillierte Inhalt vonIst die Singleton-Implementierung von Meyers in C 11 threadsicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!