volatile (C# リファレンス)

更新 : 2007 年 11 月

volatile キーワードは、同時に実行中の複数のスレッドによってフィールドが変更される可能性があることを示します。 volatile と宣言されているフィールドは、シングル スレッドによるアクセスを前提とする、コンパイラの最適化の対象にはなりません。このため、フィールドには常に最新の値が含まれます。

volatile 修飾子は、通常、アクセスをシリアル化する lock ステートメントが使用されない場合に、複数のスレッドによりアクセスされるフィールドに対して使用します。マルチスレッド シナリオにおける volatile の例については、「方法 : スレッドを作成および終了する (C# プログラミング ガイド)」を参照してください。

volatile キーワードは次の型のフィールドに使用できます。

  • 参照型

  • ポインタ型 (unsafe コンテキスト内)ポインタ自体は volatile にすることができますが、ポインタが指しているオブジェクトは volatile にすることができません。つまり、"volatile を指すポインタ" は宣言できません。

  • sbyte、byte、short、ushort、int、uint、char、float、bool などの整数型

  • 整数ベースの型の列挙型

  • 参照型であることが判明しているジェネリック型パラメータ

  • IntPtr 型および UIntPtr

volatile キーワードは、クラスまたは構造体のフィールドにのみ適用できます。ローカル変数を volatile で宣言することはできません。

使用例

次の例では、public のフィールド変数を volatile として宣言する方法を示します。

class VolatileTest
{
    public volatile int i;

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

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 3.10 実行順序

  • 10.5.3 Volatile フィールド

参照

概念

C# プログラミング ガイド

参照

C# のキーワード

修飾子 (C# リファレンス)

その他の技術情報

C# リファレンス