429Fermer431
Kevin KoflerLe 05/11/2012 à 22:27
Brunni (./419) :
J'ai réussi à faire un singleton où j'obtiens deux instances différentes en faisant 2 accès successifs d'un même thread dans mon appli Métro \o/
        public static TrucMuche Instance
        {
            get
            {
                if (sharedInstance == null)
                    sharedInstance = new TrucMuche();
                return sharedInstance;
            }
        }

Dieu sait la merde qui s'est passé derrière grin

Bah, je ne connais pas le C#, mais personnellement je ferais ça (en C++/Qt):
  private static QAtomicPointer<TrucMuche> sharedInstance;
  private static QMutex sharedInstanceMutex;
  public static TrucMuche *getInstance() {
    // fast lock-free path for the common case, using atomicity
    if (sharedInstance != 0)
      return sharedInstance;
    {
      QMutexLocker lock(&sharedInstanceMutex);
      if (sharedInstance != 0)
        return sharedInstance;
      TrucMuche *newInstance = new TrucMuche();
      sharedInstance = newInstance;
      return newInstance;
    }
  }