/********************** volatile***************************/
//정부는 예전부터 쇠고기 협상에 대해 아래와 같은 program을 작성했다.
#include <counterparty.h>
#include <expert.h>
#include <ustr.h>
void WaitCowImport(int);
int cowImport;
void main(void)
{
;
;
}
// 그리고 다음과 같이 함수를 코딩했다.
void WaitCowImport(int cowImport)
{
cowImport =1;
while ( cowImport == 1)
{
;
;
;
}
}
//정해진 대로라면 쇠고기는 어쨌던 수입하는 것이었다.
//지금은 야당인 전 정부에서도 FTA함수 때문에 반대하지 않을 것이었다.
//전문가들의 의견으로는 사라지는 질병이라는 의견을 내놓았던 것이다.
//미국무역대표부는 쇠고기 변수를 1로 하지 않으면 FTA함수에
//EOF가 전해질 것이라고 했다.
//따라서 쇠고기 변수는 대통령이 1이라고 정했고 정한 이상 바뀌지 않을 것이었다.
//그래서 정부라는 컴파일러는 프로그램의 속도를 높이기 위해 다음과 같이 최적화했다.
cowImport =1;
while ( 1 == 1) ImportFunc();
//급기야는 더욱 최적화해서 다음과 같이 해버렸다.
cowImport =1;
while ( 1 ) ImportFunc();
// 그런데 국민이라는 인터럽트에 의해 정부라는 프로그램 밖에서
//쇠고기 변수값이 0으로 바뀌었다.
cowImport = 0;
//그러나 이미 최적화가 이루어져 정부라는 프로그램은 프로그램내에서
//함수 실행을 바꿀 수 없는 상황이 되었다.
while ( 1)ImportFunc();
//위 함수는 cowImport 변수가 아무리 0이어도 무조건 실행되는 것이 된 것이다.
//쇠고기 변수는 volatile을 선언하지 않아서 최적화의 폐해를 입은 것이다.
//쇠고기 변수는 최적화하면 안되는데 최적화한 것이다.
//따라서 대통령은 쇠고기 변수를 다음과 같이 선언했어야한다.
volatile int cowImport;
//이것의 뜻-변수 cowImport는 제어할 수 없는 곳에서 시시각각 값이 변할
//가능성이 있는 변수이므로 cowImport에 관한 최적화는 실행하지
//않길 바람.
|