1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 8
    Points : 12
    Points
    12

    Par défaut Singleton<T> et appels concurrents

    J'ai voulu utiliser la classe Singleton et j'ai trouvé pas mal cette implémentation pour éviter le beforeFieldInit.
    Mais y'a quelque chose qui m'embête: pourquoi le chargement de l'instance n'est-il pas verrouillé?
    Et s'il y a un appel concurrent? on charge plusieurs fois l'instance statique et on n'utilisera que la dernière instanciée? Ne perd on alors pas plus de temps et de mémoire qu'un loading de champ au loading de l'application?

    Merci pour vos réponses.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2004
    Messages : 19 829
    Points : 40 602
    Points
    40 602

    Par défaut

    Citation Envoyé par julplemet Voir le message
    Mais y'a quelque chose qui m'embête: pourquoi le chargement de l'instance n'est-il pas verrouillé?
    En fait, il n'y a pas besoin de verrouiller explicitement l'initialisation de l'instance : les initialiseurs de type (a.k.a. constructeurs statiques) sont déjà intrinsèquement "thread safe", c'est géré par le CLR. C'est beaucoup plus fiable, et probablement plus performant, qu'une approche classique basée sur des locks.

    En fait l'idée n'est pas de moi mais de Jon Skeet ; je te suggère de lire son article à ce sujet pour comprendre les détails. L'implémentation dans Dvp.NET est juste une adaptation générique du code qu'on trouve dans la section "Fifth version - fully lazy instantiation".

    D'ailleurs je vais ajouter dans le code une référence à cet article, histoire de rendre à César ce qui lui appartient...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 8
    Points : 12
    Points
    12

    Par défaut

    Hey!

    Merci beaucoup pour cette réponse très instructive!
    Je lis le lien de ce pas.

    EDIT: Ok, super lien! J'ai appris quelque chose d'intéressant. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/11/2014, 17h50
  2. appels concurrents à une librairie partagée
    Par hector2 dans le forum Administration système
    Réponses: 0
    Dernier message: 23/04/2012, 01h49
  3. [EJB3] Problèmes de connexion en cas d'appels concurrents
    Par bobbk12000 dans le forum Java EE
    Réponses: 2
    Dernier message: 09/06/2009, 11h20
  4. Comment s'appelle ce pattern ? (multi-singleton ?)
    Par Djakisback dans le forum Design Patterns
    Réponses: 5
    Dernier message: 12/01/2009, 18h24
  5. appelle d'une classe singleton
    Par LeXo dans le forum Fichiers
    Réponses: 3
    Dernier message: 27/05/2007, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo