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 :

Le mot-cl� volatile


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut Le mot-cl� volatile
    Bonjour � tous

    Je viens de tomber sur cet article de A.Alexandrescu datant de f�vrier 2001, et j'en viens � m'interroger sur cette approche qui consiste � qualifier en volatile non pas les types primitifs, mais les objets thread-safe eux-m�me et leurs m�thodes.

    J'aimerais avoir votre avis l� dessus.

    Est-ce toujours d'actualit� ?
    Vis � vis de Boost.Thread, cette approche est-elle compl�mentaire, superflue, proscrite, ... ?

  2. #2
    screetch
    Invit�(e)
    Par d�faut
    volatile n'est pas suffisant et est souvent faux, pour faire du vrai thread safe il faut utiliser des memory barriers et des op�rations thread-safe comme des operations interlocked et des mutex (qui ont le bon gout d'�tre aussi des memory barriers)

    une memory barrier et/ou une instruction interlocked instruit au compilateur que la memoire peut avoir chang� et donc va desactiver certaines optimisations autour de cette instruction - mais pas partout comme le volatile le fait.

    le volatile est pr�vu pour quelque chose d'autre, a ne pas utiliser.

  3. #3
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Citation Envoy� par screetch Voir le message
    [...]
    le volatile est pr�vu pour quelque chose d'autre, a ne pas utiliser.
    Et qu'est-ce que ce "quelque chose d'autre" ?

    Au passage, si le mutex est g�r� dans une librairie annexe, comment le compilateur peut-il savoir qu'il ne faut pas optimiser autour de cet appel � une librairie externe ?

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    justement parce que tu ne sais pas quel etat peut etre modifi� par une biblitheque annexe. quand tu appeles printf, tes variables globales sont recharg�es car le compilateur ne sait pas ce qui peut avoir chang� a l'interieur de printf.
    et volatile etait utilis� pour les variables qui pouvaient changer de valeur sans intervention du programme; une valeur mapp�e en m�moire que le hardware pouvait mettre a jour.

  5. #5
    Membre �m�rite
    Avatar de Ekleog
    Homme Profil pro
    �tudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par d�faut
    Mais si ce n'est pas une variable globale, mais que les deux threads poss�dent tous deux un pointeur vers un objet d�clar� sur le tas, est-ce que cette variable sera �galement recharg�e � la suite d'un appel � une librairie externe ?
    Et si c'est un pointeur vers un objet d�clar� sur le tas ?
    Si les r�ponses sont oui, alors tout appel � une librairie externe oblige � recharger toute la m�moire. Ce qui est quand m�me peu performant.
    Si les r�ponses sont non, alors volatile a encore une utilit� en dehors de la modification par le hardware.

  6. #6
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    J'ai l'impression que vous n'avez pas lu l'article jusqu'au bout.
    A.A. ne propose pas de s�curiser des donn�es avec volatile. Il utilise d�j� des mutex et des �quivalents de boost::scoped_lock dans ses exemples pour pr�venir les acc�s concurrents � ses donn�es. Ce qui m'interroge, c'est cette mani�re qu'il a d'utiliser le qualifier volatile qui me semble presque d�tourn�e :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /* Let's illustrate how volatile works on user-defined types on an example. */
     
    class Gadget
    {
    public:
        void Foo() volatile;
        void Bar();
        ...
    private:
        String name_;
        int state_;
    };
    ...
    Gadget regularGadget;
    volatile Gadget volatileGadget;
     
    /* If you think volatile is not that useful with objects, prepare for some surprise. */
     
    volatileGadget.Foo(); // ok, volatile fun called for volatile object
     
     
    regularGadget.Foo();  // ok, volatile fun called for non-volatile object
    volatileGadget.Bar(); // error! Non-volatile function called for volatile object!


    D'ailleurs, � propos de l'utilisation "classique" de volatile, il pr�cise m�me :
    Don't use volatile directly with primitive types.

  7. #7
    screetch
    Invit�(e)
    Par d�faut
    l'utilit� de volatile n'est pas de corriger les probl�mes de threads, vraiment. j'ai fait une biblioth�que de multithread avec un peu de mutex, beaucoup d'interlocked et pas de volatile, et je n'ai pas eu de probl�me.
    mais les variables partag�es doivent utiliser des *vrais* moyens, portables, de partage entre threads (ce que volatile n'est pas, ou est seulement indirectement)

Discussions similaires

  1. demande de pr�cision sur le mot-clef volatile
    Par archimondain dans le forum Threads & Processus
    R�ponses: 13
    Dernier message: 01/03/2012, 19h27
  2. mot clef volatile pr�cision
    Par guillaume07 dans le forum C++
    R�ponses: 26
    Dernier message: 18/12/2010, 09h09
  3. mot clef volatile
    Par elmcherqui dans le forum C++
    R�ponses: 4
    Dernier message: 11/04/2008, 21h25
  4. Mot cl� volatile
    Par Invit� dans le forum C
    R�ponses: 6
    Dernier message: 27/10/2006, 11h55

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