[C++] Design patterns Singleton

Design patterns Singleton [C++] - Programmation

Marsh Posté le 13-11-2001 à 14:05:41    

Quelqu'un aurait-il deja implemente le design pattern Singleton ?
Un exemple ??
Quelqu'un aurait-il implemente le design pattern Singleton dans un environnement multi-threads ?
Est-ce que vous avez des exemples de codes ou des infos qui pourraient m'aider ???

Reply

Marsh Posté le 13-11-2001 à 14:05:41   

Reply

Marsh Posté le 13-11-2001 à 14:39:21    

Quel est le Pb pose par le MT vis a vis du singleton...
 
class Single
{
public :
Single * GetSingle(void);
void DestroySingle(void);
 
private :
Single();
Single(const Single&);
Single& operator=(const Single&);
~Single();
 
static Single* Slef;
static Mutex SingleMutex;
};
 
Single * Single::GetSingle(void)
{
   Single * result;
   SingleMutex.Lock();
   if (!Self)
   {
      Self = new Single();
   }
   result = Self;
   SingleMutex.UnLock();
}
 
Evidement le mutex n'est necessaire que si tu suppose que deux threads peuvent vouloir creer le singleton simultanement.

Reply

Marsh Posté le 13-11-2001 à 16:21:04    

BENB a écrit a écrit :

Quel est le Pb pose par le MT vis a vis du singleton...
 
class Single
{
public :
Single * GetSingle(void);
void DestroySingle(void);
 
private :
Single();
Single(const Single&);
Single& operator=(const Single&);
~Single();
 
static Single* Slef;
static Mutex SingleMutex;
};
 
Single * Single::GetSingle(void)
{
   Single * result;
   SingleMutex.Lock();
   if (!Self)
   {
      Self = new Single();
   }
   result = Self;
   SingleMutex.UnLock();
}
 
Evidement le mutex n'est necessaire que si tu suppose que deux threads peuvent vouloir creer le singleton simultanement.  




 
la surcharge de new marcherait pas ?

Reply

Marsh Posté le 13-11-2001 à 16:27:49    

ayachi a écrit a écrit :

 
 
la surcharge de new marcherait pas ?  




:??:
en quoi cela t'empecherais d'en instancier plusieurs, sur la pile par exemple...

Reply

Marsh Posté le 13-11-2001 à 16:55:20    

BENB a écrit a écrit :

Quel est le Pb pose par le MT vis a vis du singleton...




 
En fait, je veux empecher la creation de 2 instances de la classe Singleton en meme temps. Mais je ne sais pas quelle est la meilleure solution, soit un double-check au cas ou 2 threads vont en meme temps dans le phase critique, soit en utilisant une cle de type Mutex, mais ca je ne connait pas encore...

Reply

Marsh Posté le 28-11-2001 à 09:54:41    

:sarcastic: Quelqu'un a une idee ??? :benetton:

Reply

Marsh Posté le 28-11-2001 à 09:57:05    

karens a écrit a écrit :

En fait, je veux empecher la creation de 2 instances de la classe Singleton en meme temps. Mais je ne sais pas quelle est la meilleure solution, soit un double-check au cas ou 2 threads vont en meme temps dans le phase critique, soit en utilisant une cle de type Mutex, mais ca je ne connait pas encore...  



et tu peux pas ...
* créer le singleton
* créer le premier thread
* créer le second thread
 
:??:

Reply

Marsh Posté le 28-11-2001 à 10:47:06    

Mais non,  :non: moi je fournis une interface, ce n'est pas moi qui cree les threads !!
Mias il faut que la classe Singleton puisse etre utilisee ds un environnement multithreads.
 :bounce:

Reply

Marsh Posté le 28-11-2001 à 10:51:53    

karens a écrit a écrit :

Mais non,  :non: moi je fournis une interface, ce n'est pas moi qui cree les threads !!
Mias il faut que la classe Singleton puisse etre utilisee ds un environnement multithreads.
 :bounce:  




A quel niveau ?
la solution que je te donne est Thread-safe...
maintenant si tu n'a besoin que de thread-level A ou B... c'est plus facile...

Reply

Marsh Posté le 28-11-2001 à 12:12:18    

Oui, je veux une solution threadsafe.
Je pense que je vais utiliser Mutex + peut-etre un double-checking si necessaire.
Merci.
:jap:

Reply

Marsh Posté le 28-11-2001 à 12:12:18   

Reply

Marsh Posté le 28-11-2001 à 18:46:25    

En fait je vais utiliser Mutex, et creer une classe de ce type :
 
class SingletonLock
{
SingletonLock() { SingletonMutex.Lock(); }
~singletonLock() { SingletonMutex.Unlock(); }
};
Comme ca le Mutex sera libere quand meme ds la cas ou une exception est lancee.
 :bounce:  
Quelqu'un a-t-il deja fait quelque chose de ce style ?
Vous etes d'accord avec moi ?

Reply

Marsh Posté le 28-11-2001 à 23:33:51    

Le probleme d'une implementation bien faite du singleton, il me semble que Andrei Alexandrescu y consacre un ou deux chapitres dans son bouquin Modern C++ Design: Generic Programming and Design Patterns Applied (pas le bouquin sous la main pour verifier; si c'est pas lui, c'est dans un bouquin de la meme collection chez Addison-Wesley).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-11-2001 à 10:34:02    

Je viens de verifier, le bouquin de Andrei Alexandrescu a un chapitre de 26 pages consacre au singleton.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-11-2001 à 13:12:21    

gilou a écrit a écrit :

Je viens de verifier, le bouquin de Andrei Alexandrescu a un chapitre de 26 pages consacre au singleton.
A+,  




 
 :benetton: Sais-tu sur quel site je peux lire ce bouquin en ligne ?? :benetton:

Reply

Marsh Posté le 30-11-2001 à 01:15:06    

M'etonnerait qu'on le trouve en ligne; c'est un bouquin assez recent, et assez trappu.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed