Maison > développement back-end > C++ > Le Singleton Thread-Safe de Meyers est-il sûr ?

Le Singleton Thread-Safe de Meyers est-il sûr ?

DDD
Libérer: 2024-12-29 11:40:11
original
422 Les gens l'ont consulté

Is Meyers' Singleton Thread-Safe?

Singleton de Meyers : évaluation et amélioration de la sécurité des threads

L'implémentation par Meyers du modèle Singleton utilise une initialisation paresseuse, mais sa sécurité des threads reste une préoccupation. Cet article explore les subtilités de la sécurité des threads dans le code donné :

static Singleton& instance()
{
     static Singleton s;
     return s;
}
Copier après la connexion

En C 11 et au-delà

En C 11, l'initialisation paresseuse des objets globaux est thread safe en vertu de la garantie du standard : une initialisation simultanée entraînera une attente jusqu'à son achèvement. GCC et Visual Studio prennent en charge cette fonctionnalité.

Par conséquent, dans un environnement C 11 ou version ultérieure, l'implémentation Singleton de Meyers est thread-safe.

En C 03 et versions antérieures

En C 03 et versions antérieures, le code fourni n'est pas thread-safe. Comme décrit par Meyers dans son article, les modèles de verrouillage revérifiés peuvent être sensibles à des conditions de concurrence critique sur certaines architectures. Pour assurer la sécurité des threads dans ce contexte, un verrouillage complet autour de la méthode d'instanciation est recommandé.

Code pour C 03 Thread Safety

Voici une modification du code pour Sécurité des threads C 03 :

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;
}
Copier après la connexion

Cette implémentation utilise un mutex pour synchroniser l'accès lors de l'initialisation, garantissant ainsi la sécurité des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal