volatile (C#-Referenz)
Aktualisiert: November 2007
Das volatile-Schlüsselwort gibt an, dass ein Feld von mehreren gleichzeitig ausgeführten Threads geändert werden kann. Mit volatile deklarierte Felder unterliegen nicht den Compileroptimierungen, für die der Zugriff durch einen Thread Voraussetzung ist. Auf diese Weise wird sichergestellt, dass im Feld stets der aktuelle Wert vorhanden ist.
Der volatile-Modifizierer wird normalerweise für ein Feld verwendet, auf das mehrere Threads zugreifen, ohne dass die lock-Anweisung zur Zugriffsserialisierung verwendet wird. Ein Beispiel für volatile in einem Multithreadszenario finden Sie unter Gewusst wie: Erstellen und Beenden von Threads (C#-Programmierhandbuch).
Das volatile-Schlüsselwort kann auf Felder der folgenden Typen angewendet werden:
Referenztypen.
Zeigertypen (in einem unsicheren Kontext) Beachten Sie, dass der Zeiger flüchtig sein kann, das Objekt, auf den er zeigt, jedoch nicht. Mit anderen Worten können Sie keinen "Zeiger auf volatile" deklarieren.
Ganzzahlige Typen wie sbyte, byte, short, ushort, int, uint, char, float und bool.
Einen Enumerationstyp mit einem ganzzahligen Basistyp.
Generische Typparameter, von denen bekannt ist, dass sie Referenztypen sind.
Das volatile-Schlüsselwort kann nur auf Felder einer Klasse oder Struktur angewendet werden. Lokale Variablen können nicht als volatile deklariert werden.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie eine public-Feldvariable als volatile deklariert wird.
class VolatileTest
{
public volatile int i;
public void Test(int _i)
{
i = _i;
}
}
C#-Programmiersprachenspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:
3.10 Ausführungsreihenfolge
10.5.3 Flüchtige Felder