Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1079 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] A quoi sert le mot clef volatile ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] A quoi sert le mot clef volatile ?

n°44991
chadenat
Posté le 06-07-2001 à 11:11:45  profilanswer
 

J'aimerais savoir à quoi sert le mot clef volatile. La doc donne plusieurs définitions différentes.

mood
Publicité
Posté le 06-07-2001 à 11:11:45  profilanswer
 

n°44993
TheJackal
Posté le 06-07-2001 à 11:13:00  profilanswer
 

c pas un truc du genre que la var peut etre modifie par une autre thread ?

n°45009
SoWhatIn22
Posté le 06-07-2001 à 12:19:28  profilanswer
 

volatile, c'est pour qu'une variable puisse être modifiée par autre chose que le process qui l'a créé.
On utilise souvent ca quand on programme du hardware.

n°45014
TheJackal
Posté le 06-07-2001 à 12:36:35  profilanswer
 

process ou thread ca ce rejoint en qq sorte.
donc moi raison :)

n°45016
janoscoder
Posté le 06-07-2001 à 12:52:02  profilanswer
 

volatile est traduit par le copilateur par : ne mets jamais cette variable en registre.
 
En effet, le processeur charge des variables dans ses registres pour un traîtement plus rapide, mais quand il y a un changement de thread, ces registes sont sauvegardés (pour être restaurés quand le thread est réactivé) sans checher à remettre les variables dans leurs emplacements mémoire qui leur appartiennent.
 
Il se peut donc que la version la plus à jour d'une variable soit dans un registre, et que je changement de tâche active un autre thread qui veut toucher à la variable. Celui-ci voit donc une variable non à jour, et de toute manière, qd le premier thread sera activé, celui là risque bien d'écraser la varible en mémoire par la valeur qu'il avait en registre.
 
Pour palier à ceci, un volatile évitera le passage en registre.  
 
Mais il faut savoir que le volatile empêche l'optimisation de la variable, aussi ce n'est pas sérieux de mettre un compteur de boucle interne en volatile (ou autres conneries de ce genre).
 
Enfin, quand on a un prog qui ne bugge pas en debug, mais qui plante en version optimisée ou release, l'absence de volatile est une cause possible de plantage. C'est chiant car c'est un problème que l'on ne peut pas voir avec le débuggueur.


---------------
-----------------------
n°45086
BENB
100% Lux.
Posté le 06-07-2001 à 16:35:53  profilanswer
 

Le cas classique en multi-Thread c'est :
 
 
Mutex.Lock();
while( !continue)
{
   Mutex.UnLock();
   faire qq chose en attendant mais sans modifier continue
   Mutex.Lock()
}
Mutex.Unlock();
 
While (!continue) a de fortes chance d'etre optimise en while(true) alors que cette boucle est typiquement en attente de liberation d'un autre thread...

n°45096
chadenat
Posté le 06-07-2001 à 17:30:03  profilanswer
 

merci à tous

n°1891125
cque
Posté le 03-06-2009 à 22:37:11  profilanswer
 

BENB a écrit :

Le cas classique en multi-Thread c'est :
 
 
Mutex.Lock();
while( !continue)
{
   Mutex.UnLock();
   faire qq chose en attendant mais sans modifier continue
   Mutex.Lock()
}
Mutex.Unlock();
 
While (!continue) a de fortes chance d'etre optimise en while(true) alors que cette boucle est typiquement en attente de liberation d'un autre thread...


 
Puisque ce thread est là depuis si longtemps sans réponse, je voulais simplement prévenir le lecteur éventuel que c'est exactement ce qu'il ne faut PAS faire avec le mot clé volatile.
 
Volatile n'a rien à voir avec le multi-threading. Ce mot est généralement utilisé lorsque le contenu de la mémoire peu changer sans raison logicielle. Par exemple, du matériel (hardware) comme une sonde de température mappée sur une adresse mémoire. Google un peu pour voir et comprendre.

n°1891179
Taz
bisounours-codeur
Posté le 04-06-2009 à 09:04:27  profilanswer
 

janoscoder a écrit :

volatile est traduit par le copilateur par : ne mets jamais cette variable en registre.


Nan hein. Ca lui dit qu'il doit relire la variable systématiquement. Seulement faire de la synchro avec, c'est complètement bidon.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] A quoi sert le mot clef volatile ?

 

Sujets relatifs
[Debutant en C]ne, m en voulez pas a quoi sert le MODULO ??[C++] mot cle VIRTUAL - a quoi ca sert ?
[JAVA] à quoi ça sert que je me casse le cul à écrire des méthodes...dreamweaver Interdev sert à quoi???
un truc genre : index.htm?machin=1234 ça se sert comment que c ?[C++ / Microsoft] Quelqu'un saurait-il me dire à quoi sert ceci
A quoi sert strstr() en C 
Plus de sujets relatifs à : [C++] A quoi sert le mot clef volatile ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR