Implémentation de Singleton multithread-safe en C 11 sans mutex
En C 11, le multithreading introduit de nouvelles préoccupations pour l'implémentation de classes singleton. Bien que l'utilisation de mutex puisse garantir la sécurité des threads, elle peut affecter les performances. Cet article explore une approche alternative pour créer un singleton sans verrouillage sans recourir aux mutex.
Énoncé du problème :
Comment pouvons-nous implémenter un singleton initialisé paresseux en C 11 sans utiliser de mutex pour des raisons de performances ?
Solution proposée :
atomic_compare_exchange_strong :
Pour obtenir une initialisation sans verrouillage, nous peut exploiter la fonction std::atomic_compare_exchange_strong. Cette opération atomique compare la valeur attendue d'une variable std::atomic (flag) avec sa valeur souhaitée (desr) et, si elles correspondent, met à jour la variable en desr.
Processus d'initialisation :
Dans la fonction d'initialisation, nous effectuons les étapes suivantes :
Thread Safety :
L'exécution simultanée des threads est gérée par les mesures suivantes :
Exemple de mise en œuvre :
<code class="cpp">class Singleton { public: static Singleton& get() { static Singleton instance; return instance; } static bool initialize(const string& name); };</code>
Conclusion :
En exploitant la fonction atomic_compare_exchange_strong, nous pouvons implémenter un singleton multithread-safe en C 11 sans compter sur les mutex. Cette approche garantit qu'un seul thread réussira à initialiser le singleton à un moment donné.
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!