// Thread 1:
x = 1;
done = 1
// Thread 2:
while(done == 0) ;
print(x)
와 같은 코드가 있을때 프로그램은 정상적으로 1을 출력할 수 있을까? 정답은 "그럴수도 있다" 이다. while문이 영원히 끝나지 않을 수도 있고, 1 대신 0이 출력 될 수도 있다.
// Thread 1
x = 1
y = 1
// Thread 2
r1 = y
r2 = x
에서 r1 =1, r2 = 0이 나올수 있을까? 마찬가지로 그럴수 있다.
생각보다 컴파일러의 최적화는 강력하다.
if (c) {
x++;
} else {
....
}
에서 if-else 분기에 10 clock이 사용된다고 하자. 컴파일러는 어셈블리당 클럭을 계산해서 최소한의 클럭을 사용하게 유도한다. 즉, 아래와 같이 유도할 수도 있다.
x++;
if (!c) {
x--;
....
}