// 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--;
	....
}