글 작성자: 써니루루

SingleTone Pattern을 적용하기 위해 volatile이란 키워드가 있는걸 알게 되었습니다.
목적에 맞는 코딩이 중요하니깐 꼭 알아둬야겠네요..


volatile(C# 참조)

 
volatile 키워드는 동시에 실행 중인 여러 스레드에 의해 필드가 수정될 수 있음을 나타냅니다. volatile로 선언된 필드에는 단일 스레드를 통한 액세스를 전제로 하는 컴파일러 최적화가 적용되지 않습니다. 이렇게 하면 필드의 값을 항상 최신 상태로 유지할 수 있습니다.

일반적으로 volatile 한정자는 액세스를 serialize할 때 lock 문(C# 참조) 문을 사용하지 않고 여러 스레드에서 액세스하는 필드에 사용됩니다. 다중 스레드 시나리오에서 volatile을 사용하는 방법의 예제는 방법: 스레드 만들기 및 종료(C# 프로그래밍 가이드)를 참조하십시오.

volatile 키워드는 다음과 같은 형식의 필드에 적용할 수 있습니다.

  • 참조 형식

  • 안전하지 않은 컨텍스트의 포인터 형식 포인터 자체는 volatile일 수 있는 반면 포인터가 가리키는 개체는 volatile일 수 없습니다. 즉, "volatile 개체에 대한 포인터"를 선언할 수 없습니다.

  • sbyte, byte, short, ushort, int, uint, char, float 및 bool 같은 정수 계열 형식

  • 정수 계열 형식을 기반으로 한 열거형

  • 참조 형식으로 알려진 제네릭 형식 매개 변수

  • IntPtrUIntPtr

volatile 키워드는 클래스 또는 구조체의 필드에만 적용할 수 있습니다. 로컬 변수는 volatile로 선언할 수 없습니다.

다음 예제에서는 공용 필드 변수를 volatile로 선언하는 방법을 보여 줍니다.

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

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

자세한 내용은 C# 언어 사양의 다음 단원을 참조하십시오.

  • 3.10 실행 순서

  • 10.4.3 Volatile 필드