Design patterns Singleton [C++] - Programmation
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.
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 ?
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...
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...
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
Marsh Posté le 28-11-2001 à 10:47:06
Mais 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.
Marsh Posté le 28-11-2001 à 10:51:53
karens a écrit a écrit : Mais 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. |
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...
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.
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.
Quelqu'un a-t-il deja fait quelque chose de ce style ?
Vous etes d'accord avec moi ?
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+,
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+,
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+, |
Sais-tu sur quel site je peux lire ce bouquin en ligne ??
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+,
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 ???