Heim >Backend-Entwicklung >C++ >Ist Meyers Singleton-Implementierung wirklich ein Singleton und wie schneidet sie im Vergleich zu Thread-sicheren Alternativen ab?
Die Meyer-Singleton-Implementierung, dargestellt als statisches Singleton&-Instanz(), wirft Fragen hinsichtlich ihrer Singleton-Funktionalität auf.
Die Singleton-Natur ergibt sich aus dem Schlüsselwort static. Die statische Speicherdauer für lokale Variablen bedeutet, dass im gesamten Programm nur eine Instanz vorhanden ist.
Betrachten Sie diesen äquivalenten Pseudocode (nicht den tatsächlichen C 98-Code):
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
Dies fasst das Verhalten des Originals grob zusammen Implementierung.
In der tatsächlichen C 11-Implementierung wird für jede eine Guard-Variable verwendet statisch, fungiert als Barriere für Threads.
Beide Implementierungen erzwingen die Singleton-Integrität, unterscheiden sich jedoch in der Thread-Behandlung und der Codekomplexität.
Meyers Implementierung:
Wikipedia-Implementierung:
Die Meyer-Implementierung ist tatsächlich ein Singleton, da die statische Speicherdauer mehrere Instanziierungen verhindert. Die Wahl zwischen den beiden Implementierungen hängt von der spezifischen Anwendung und Multithreading-Überlegungen ab.
Das obige ist der detaillierte Inhalt vonIst Meyers Singleton-Implementierung wirklich ein Singleton und wie schneidet sie im Vergleich zu Thread-sicheren Alternativen ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!