C#
volatile
doublerabbits
2023. 9. 8. 10:49
최적화
- 캐싱(CPU 가 메모리에서 변수를 읽어서 레지스트리에 저장)된 변수에 대해서는 CPU 가 메모리 접근(Read)을 하지 않도록 한다.
- 이는 멀티태스킹 환경에서 의도하지 않은 상황을 발생시킨다.
A 스레드에 캐시된 변수가 있는 상황에서
B 스레드가 해당 변수를 변경(Write) 할때
A 가 캐시된 변수의 값을 사용하면 오류 발생
A 가 정확한 값을 메모리에서 다시 읽어오는 과정이 필요하다.
volatile 로 지정된 변수는 최적화를 수행하지 않는다.
- 필드 변수에만 적용 가능
- 지역 변수는 volatile 선언 불가
- 일부 항목에 대해서는 atomic 한 연산(read-modify-write)을 수행하지만, 모두 지원되지는 않음(다중 스레드 안전성은 Interlocked, lock 등을 사용해야 함)