[질문]volatile

익명 사용자의 이미지

kernel source를 보면 volatile이란 게 눈에 띄는 데

"unsigned long volatile" 또는 "volatile unsigned long" 처럼

data type의 앞 또는 뒤에 붙어 변수 선언에 사용되는 것 같습니다.

이 volatile은 어떤 역할을 하는 것입니까?

익명 사용자의 이미지

volatile은 그 변수에 대해서 최적화하지 말란 뜻입니다..

예를 들면,

unsigned long a=1;
main()
{
while(a);
}

이런코드를 -O2옵션을 줘서 gcc로 컴파일 하면..

a의 값을 어떤 레지스터에 복사한후 while문을 반복할때..

그 레지스터 값으로만 참,거짓을 판단합니다..

만약에 while문 동안에 저 a라는 변수가 다른 쓰레드에 의해서 0으로 바뀌
어져도..

이미 레지스터에 로드된 값만으로 판단을 하므로 무조건 무한루프가 되겠
죠...

이런걸 방지하기 위해서 volatile을 붙여줍니다..

volatile을 쓰면 a라는 변수가 참조될때마다 직접 그 변수가 실제로

위치해 있는 메모리상의 주소에서 값을 가져오죠..

참고로 spinlock같은 경우에 volatile이 많이 쓰이죠..

최성익 wrote..
kernel source를 보면 volatile이란 게 눈에 띄는 데

"unsigned long volatile" 또는 "volatile unsigned long" 처럼

data type의 앞 또는 뒤에 붙어 변수 선언에 사용되는 것 같습니다.

이 volatile은 어떤 역할을 하는 것입니까?