Maison  >  Article  >  développement back-end  >  Pouvez-vous créer un singleton Thread-Safe en C 11 sans utiliser `` ?

Pouvez-vous créer un singleton Thread-Safe en C 11 sans utiliser `` ?

DDD
DDDoriginal
2024-10-30 02:34:29208parcourir

Can You Create a Thread-Safe Singleton in C  11 Without Using ``?

Comment implémenter un singleton multithread-safe en C 11 sans utiliser

Introduction

L'implémentation de singletons thread-safe en C 11 est un sujet de débat depuis l'introduction du multithreading. Bien que les mutex fournissent un moyen simple d’assurer la sécurité des threads, ils peuvent introduire une surcharge de performances. Cet article explore une approche alternative pour implémenter des singletons multithread-safe sans utiliser de mutex.

Initialisation paresseuse avec attente simultanée

C 11 introduit une nouvelle fonctionnalité de langage qui simplifie l'implémentation d'initialisation paresseuse. L'exécution simultanée attendra désormais si une variable locale statique est déjà en cours d'initialisation, éliminant ainsi le besoin de verrouillage manuel.

Implémentation

Une fonction statique simple qui récupère l'instance singleton peut être implémenté comme suit :

<code class="cpp">static Singleton& get() {
  static Singleton instance;
  return instance;
}</code>

Cette fonction fournira un comportement correct en C 11 tant que le compilateur implémente correctement la norme.

Découragement des singletons

Malgré cette mise en œuvre simplifiée, l'auteur souligne que l'utilisation de singletons est généralement déconseillée. Ils préconisent d'éviter complètement les singletons en raison de leurs limitations inhérentes.

Notes supplémentaires

  1. La fonction clear() mentionnée dans le code d'origine est utilisée pour tester et ne doit pas être inclus dans une implémentation singleton réelle.
  2. La bibliothèque atomique n'est pas référencée dans la réponse fournie par l'expert.
  3. L'exemple de code inclus dans la question n'est pas analysé dans le réponse.

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!

Déclaration:
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