Cela indique au compilateur qu'à chaque fois qu'il doit faire un accès
à la variable, il doit aller y accéder réellement en mémoire (et donc
ne pas utiliser un registre pour la manipuler).
Par exemple, suppose que tu aies un thread exécutant ce type
de traitement:
Et tu as un 2ème thread qui va modifier la variable "running", en la
mettant à 0.
Si la variable "running" n'est pas marquée "volatile", le compilo va
utiliser un registre dans la fonction thread_1 pour la stocker, et
ne reconsultera pas la donnée elle-même en mémoire. Ce qui fait
que si le 2ème thread modifie cette variable, cela n'est pas pris
en compte.
Le "volatile" indique donc au compilo que cette valeur peut être
modifiée de manière "extérieure".
# explication sommaire
Posté par galactikboulay . En réponse au message petite question..... Évalué à 9.
à la variable, il doit aller y accéder réellement en mémoire (et donc
ne pas utiliser un registre pour la manipuler).
Par exemple, suppose que tu aies un thread exécutant ce type
de traitement:
volatile int running = 1;
void thread_1(void)
{
while(running)
{
/* ... */
}
}
Et tu as un 2ème thread qui va modifier la variable "running", en la
mettant à 0.
Si la variable "running" n'est pas marquée "volatile", le compilo va
utiliser un registre dans la fonction thread_1 pour la stocker, et
ne reconsultera pas la donnée elle-même en mémoire. Ce qui fait
que si le 2ème thread modifie cette variable, cela n'est pas pris
en compte.
Le "volatile" indique donc au compilo que cette valeur peut être
modifiée de manière "extérieure".