D'après ce que je comprends, le modificateur 'volatile' en C# a deux effets:Exemple de 'volatile' empêchant une optimisation du compilateur en C#?
- Inserts clôtures comme nécessaires pour le processeur cible
- Prévient certaines optimisations du compilateur
x86/AMD64, (1) n'est pas pertinent. Ces processeurs n'ont pas besoin de clôtures pour les sémantiques volatiles. (ia64 est différent, cependant.)
Donc, nous sommes à (2). Mais, pour les exemples que j'ai essayé, volatile ne fait aucune différence pour l'assemblage jit-ted.
Ma question est: Pouvez-vous donner un exemple d'un exemple de code C# où l'ajout d'un modificateur 'volatile' sur un champ donne un code d'assemblage jit-ted différent?
Super, c'est exactement ce que je cherchais! Ici, la volatilité résulte en effet en un code d'assemblage différent. –
Dans le cas où quelqu'un est curieux, sans un modificateur volatile, la valeur du champ est mise en cache dans un registre. Et, lorsque la valeur est dans un registre, le noyau en boucle ne "notera" jamais la mise à jour faite par un autre noyau. –