IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
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

Threads & Processus C++ Discussion :

singleton thread safe


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut singleton thread safe
    Bonjour,

    j'ai du mal � comprendre les probl�mes de concurrence pos�s par le pattern singleton. Par exemple, je ne comprend rien � ce papier: http://www.aristeia.com/Papers/DDJ_J...04_revised.pdf

    Ne suffit-il pas de prot�ger l'accesseur � l'instance unique pour que notre singleton soit thread safe? Par exemple, le singleton suivant est-il thread safe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    static Singleton* GetInstance()
    {
    	boost::mutex::scoped_lock lock(my_mutex);
    	if ( instance == nullptr )
    		intance = new Singleton();
    	return instance;
    }

  2. #2
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par r0d Voir le message
    Bonjour,

    j'ai du mal � comprendre les probl�mes de concurrence pos�s par le pattern singleton. Par exemple, je ne comprend rien � ce papier: http://www.aristeia.com/Papers/DDJ_J...04_revised.pdf

    Ne suffit-il pas de prot�ger l'accesseur � l'instance unique pour que notre singleton soit thread safe? Par exemple, le singleton suivant est-il thread safe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    static Singleton* GetInstance()
    {
    	boost::mutex::scoped_lock lock(my_mutex);
    	if ( instance == nullptr )
    		intance = new Singleton();
    	return instance;
    }
    L�, tu prot�ges la cr�ation et l'acc�s � la ressource, pas son utilisation. Le singleton lui m�me n'est toujours pas thread safe.

    Un singleton thread-safe a un second mutex � l'int�rieur du singleton lui-m�me.

    Le papier de Myers dit que ton code est tout � fait valide, cependant la prot�ction qu'il met en oeuvre est co�teuse. Une fois le singleton cr��, il n'y a plus lieu de locker le mutex, parce que - le singleton existant - le m�me pointeur sera toujours retourn�. Du coup, tu va locker pour rien (et un lock, c'est tout sauf gratuit).

    Le reste du papier d�crit pourquoi il est difficile d'�crire une impl�mentation valide et compl�tement correcte de l'instanciation d'un singleton qui ne soit pas diminu� par un lock inutile (utilisation du "lock doublement v�rifi�").
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Le C++11 va nous permettre d'avoir des singletons thread-safe, robustes et rapides.
    La fa�on la plus simple d'y parvenir, c'est avec le mod�le �nonc� par Scott Meyers dans son Effective C++ : avec une variable locale statique. Depuis le C++11, ce sera thread-safe.
    Par contre, ce singleton l� ne permet pas de contr�ler finement le moment de sa lib�ration.

    En vrac, quelques liens que j'ai collect�s sur le sujet. Je n'ai pas encore pris le temps de les trier ni d'�valuer si toutes les solutions donn�es �taient valables.
    - http://stackoverflow.com/questions/6...ngleton-in-c11
    - http://stackoverflow.com/questions/1...design-pattern
    - http://www.athile.net/library/wiki/i...sing_C%2B%2B0x
    - http://www.1024cores.net/home/lock-f...initialization
    - http://stackoverflow.com/questions/6...singleton-in-c
    - http://www.justsoftwaresolutions.co....d-locking.html
    - http://silviuardelean.ro/2012/06/05/...on-approaches/

    (je te passe les liens qui remettent les singletons � leur place de variable globale vu que ce n'est pas le sujet ici)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  4. #4
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    Merci Luc

  5. #5
    Membre confirm�
    Inscrit en
    Juin 2008
    Messages
    140
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par d�faut
    Bonjour,
    qu'en est-il de ce qui est expliqu� ici ?
    J'avais eu l'impression (� l'�poque o� je me suis int�ress� � ce design pattern) que les solutions propos�es �taient correctes.

  6. #6
    Membre Expert

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2004
    Messages
    1 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Doubs (Franche Comt�)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 391
    Par d�faut
    http://come-david.developpez.com/tut...ngleton#L4-a-3

    David dit bien qu'en MT c'est complexe. Et � l'�poque o� il a �crit ca, le C++11 n'existait pas; rendant les solutions au probl�me assez complexe.

Discussions similaires

  1. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    R�ponses: 4
    Dernier message: 09/01/2007, 13h00
  2. fonction de stdio.h thread safe ??
    Par boolzor dans le forum POSIX
    R�ponses: 3
    Dernier message: 30/04/2006, 20h03
  3. Code "Thread Safe" ?
    Par Neitsa dans le forum C++
    R�ponses: 3
    Dernier message: 23/12/2005, 14h33
  4. [Language]Immutable & Thread-Safe
    Par Repti dans le forum Concurrence et multi-thread
    R�ponses: 4
    Dernier message: 21/12/2005, 15h50
  5. [MFC] CMAP non thread safe ?
    Par fmarot dans le forum MFC
    R�ponses: 5
    Dernier message: 04/10/2005, 13h21

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