Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dvp.NET Discussion :

Singleton<T> et appels concurrents


Sujet :

Dvp.NET

  1. #1
    Membre à l'essai
    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

    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
    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

###raw>template_hook.ano_emploi###