Archives de Tag: volatile

Volatile – C#

Petit cours de C#

Vous connaissez sûrement les différents modificateur d’accès C#. const, readonly, static. Mais volatile ??

http://msdn.microsoft.com/fr-fr/library/x13ttww7(v=vs.80).aspx

Volatile c’est une manière d’obtenir la dernière valeur d’une variable. Rien ne vaut l’exemple :

 class Test {
    int foo;
    static void Main()
    {
        var test = new Test();
        new Thread(delegate() { Thread.Sleep(500); test.foo = 255; }).Start();
        while (test.foo != 255) ;
        Console.WriteLine("OK");
    }
}

//output rien du tout
//si on rajoute volatile : output : OK

Attention il faut lancé sans le mode débogage (Ctrl + F5)

Exemple tiré de StackOverflow ici.

Sans déclaré volatile, le code est optimisé et donc le programme ne va pas chercher la nouvelle valeur de ‘foo’ qui reste donc à 0. Et le code va attendre à la ligne while (test.foo != 255) ;

volatile

En déclarant foo volatile, lorsque la variable est modifié par un autre processus, l’impact se fait ressentir sur tous les processus, puisque le programme va aller chercher la valeur à chaque fois. Ainsi au bout des 500ms du thread le message OK va apparaître.