시간은 왼쪽에서 오른쪽으로 흐릅니다. 맨 왼쪽의 레지스터와 메모리를 보면 전역 변수 g_count 값을 범용 레지스터로 가져옵니다. 현재 g_count 값은 0입니다. 그 옆을 보면 g_count += 1 코드가 실행되어 레지스터에 있는 값이 1 증가했습니다. 세 번째에서 연산이 끝난 레지스터 값을 g_count에 저장합니다. 이제 컨텍스트 스위칭이 일어나 스레드 2에 CPU가 할당됩니다. 네 번째부터 여섯 번째는 앞의 과정을 반복하는 부분으로 최종 결과는 2입니다. 이 결과는 가장 이상적인 경우지만 선점형 스케줄링에서는 스레드 1의 연산이 완전히 끝날 때까지 컨텍스트 스위칭을 기다려 주지 않습니다. 다음과 같은 경우도 일어날 수 있습니다(그림 10-9).
그림 10-9 두 번째 경우
첫 번째와 두 번째의 레지스터와 메모리를 보면 스레드 1이 CPU를 점유하고 있고, 레지스터로 g_count 값을 가져와 1을 더해 레지스터 값이 1이 되었습니다. 여기까지는 첫 번째 경우나 두 번째 경우가 같습니다. 레지스터 값만 g_count에 저장하면 연산이 끝납니다.