Heim > Backend-Entwicklung > C++ > Ist Meyers' Singleton Thread-sicher?

Ist Meyers' Singleton Thread-sicher?

DDD
Freigeben: 2024-12-29 11:40:11
Original
413 Leute haben es durchsucht

Is Meyers' Singleton Thread-Safe?

Meyers' Singleton: Bewertung und Verbesserung der Thread-Sicherheit

Die Meyers-Implementierung des Singleton-Musters nutzt eine verzögerte Initialisierung, die Thread-Sicherheit bleibt jedoch erhalten ein Anliegen. Dieser Artikel befasst sich mit den Feinheiten der Thread-Sicherheit im angegebenen Code:

static Singleton& instance()
{
     static Singleton s;
     return s;
}
Nach dem Login kopieren

In C 11 und darüber hinaus

In C 11 erfolgt die verzögerte Initialisierung globaler Objekte Thread-sicher aufgrund der Garantie des Standards: Die gleichzeitige Initialisierung führt dazu, dass bis zu ihrem Abschluss gewartet wird. Sowohl GCC als auch Visual Studio unterstützen diese Funktion.

Daher ist die Singleton-Implementierung von Meyers in einer Umgebung mit C 11 oder höher threadsicher.

In C 03 und früher

In C 03 und früher ist der bereitgestellte Code nicht threadsicher. Wie Meyers in seinem Artikel beschreibt, können doppelt überprüfte Sperrmuster auf bestimmten Architekturen anfällig für Race Conditions sein. Um in diesem Zusammenhang Thread-Sicherheit zu erreichen, wird eine vollständige Sperre um die Instanziierungsmethode empfohlen.

Code für C 03 Thread-Sicherheit

Hier ist eine Modifikation des Codes für C 03 Thread-Sicherheit:

static Singleton*& instance()
{
    static Singleton* s = nullptr;
    static std::mutex s_mutex;

    std::lock_guard<std::mutex> guard(s_mutex);
    if (!s)
        s = new Singleton;

    return s;
}
Nach dem Login kopieren

Diese Implementierung verwendet einen Mutex, um den Zugriff während der Initialisierung zu synchronisieren und so die Thread-Sicherheit zu gewährleisten.

Das obige ist der detaillierte Inhalt vonIst Meyers' Singleton Thread-sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage