Non, mais c'est lié. Une variable volatile permet de s'assurer que le compilateur ne va pas garder la variable dans un registre mais la relire à chaque accès. Par contre pour un accès donné, il faut quand même passer par un registre à un moment donné.
Par exemple, si x est une variable volatile et que tu as le code :
x=x+1;x=x+1;
Le compilateur va charger x dans un registre, l'incrémenter et le sauvegarder en mémoire, puis recommencer. Si la variable n'est pas volatile, il va la charger une seule fois, l'incrémenter deux fois (une fois en fait, mais de deux...) puis la sauvegarder.
Donc si un autre thread modifie la variable entre la sauvegarde et le deuxième chargement, il n'y a pas de problème, par contre si le thread est interrompu pendant l'incrémentation cela merde quand même. Il faut une opération atomique pour éviter le problème.
[^] # Re: templates variadiques
Posté par beagf . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 3.
Non, mais c'est lié. Une variable volatile permet de s'assurer que le compilateur ne va pas garder la variable dans un registre mais la relire à chaque accès. Par contre pour un accès donné, il faut quand même passer par un registre à un moment donné.
Par exemple, si x est une variable volatile et que tu as le code :
Le compilateur va charger x dans un registre, l'incrémenter et le sauvegarder en mémoire, puis recommencer. Si la variable n'est pas volatile, il va la charger une seule fois, l'incrémenter deux fois (une fois en fait, mais de deux...) puis la sauvegarder.
Donc si un autre thread modifie la variable entre la sauvegarde et le deuxième chargement, il n'y a pas de problème, par contre si le thread est interrompu pendant l'incrémentation cela merde quand même. Il faut une opération atomique pour éviter le problème.