volatile (Référence C#)

Le mot clé volatile indique qu'un champ peut être modifié par plusieurs threads qui s'exécutent simultanément. Les champs qui sont déclarés volatile ne sont pas soumis aux optimisations du compilateur qui supposent l'accès par un seul thread. Cela garantit que la valeur la plus à jour est présente dans le champ à tout moment.

Le modificateur volatile est généralement utilisé pour un champ auquel accèdent plusieurs threads sans utiliser l'instruction lock, instruction (Référence C#) pour sérialiser l'accès. Consultez Comment : créer et terminer des threads (Guide de programmation C#) pour obtenir un exemple de volatile dans un scénario multithread.

Le mot clé volatile peut être appliqué aux champs des types suivants :

  • Types référence.

  • Types pointeur (dans un contexte unsafe). Notez que, même si le pointeur lui-même peut être volatile, l'objet sur lequel il pointe ne le peut pas. En d'autres termes, vous ne pouvez pas déclarer un pointeur vers un objet volatile.

  • Types intégraux tels que sbyte, byte, short, ushort, int, uint, char, float et bool.

  • Type d'enum avec un type de base intégral.

  • Paramètres de type générique connus comme des types référence.

  • IntPtr et UIntPtr.

Le mot clé volatile ne peut s'appliquer qu'aux champs d'une classe ou d'une structure. Les variables locales ne peuvent pas être déclarées volatile.

Exemple

L'exemple ci-dessous montre comment déclarer une variable de champ public comme volatile.

// csharp_volatile.cs
// compile with: /target:library
class Test
{
   public volatile int i;

   Test(int _i)
   {
      i = _i;
   }
}

Spécification du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 3.10 Ordre d'exécution

  • 10.4.3 Champs volatiles

Voir aussi

Référence

Mots clés C#
Modificateurs (Référence C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#