volatile 지금까지 프로그램을 하면서 한번도 사용해 본적이 없는 키워드이다.
그럼 언제 사용하는가 ?
c프로그램은 컴파일 언어이기 때문에 c코드를 컴파일하게 된다.
이때 컴파일을 담당하는 컴파일러가 코드 수행의 성능 향상을 위해서 최적화를 하는데
이런 최적화를 못하도록 컴파일러에게 명시적으로 알려주는 키워드가 volatile이다.
어떤 변수가 있고 이 변수가 루프를 끝낼지 말지를 결정하는 변수일때
컴파일러가 이 변수는 메인메모리에서 읽어오지 않고 처음 로딩후 로컬 레지스터에 저장한후
다음부터는 이 로컬레지스터에서 읽어오게 되면 메인메모리에 변경된 값이 적용되지 않는 경우가 발생하여
프로그래머가 예상했던 동작과 다르게 동작할 수 있다.
보통(single 프로세스)의 프로그램환경에서는 발생하는 일이 없지만, 멀티 쓰레드나 멀티 프로세스 환경에서 이런 문제가 생긴다고 한다.
그럴 경우 컴파일러에게 "이 변수는 레지스터에서 저정하지 말고 필요할때마다 메인메모리에서 가져와라" 라고 알려주게 된다.