스레드의 모든 작업은 인터리브 작업이므로 프로세스의 일부가 시간이 겹치는 것처럼 보입니다. 여러 스레드가있는 단일 코어 시스템은 한 번의 스레드에서 작은 비트의 코드를 실행 한 다음 다른 스레드로 전환하기 만합니다. 간단한 스케줄러는 우선 순위가 가장 높은 스레드를 결정하고 실제로 코어에서 실행됩니다.
단일 코어 컴퓨터에서는 실제로 "동시에" 아무 것도 발생 하지 않습니다 . 모두 인터리브 된 실행입니다.
인터리빙을 달성하는 방법은 여러 가지가 있습니다. 많은.
두 스레드가 공통 변수에 쓸 수 있도록 간단한 잠금을 사용하는 간단한 두 스레드 프로세스가 있다고 가정 해 봅시다. 6 개의 코드 블록이 있습니다.
- 잠금 전 T1
- 잠금 장치가있는 T1
- T1 애프터 락
- 잠금 전 T2
- 잠금 장치가있는 T2
- T2 애프터 락
[이것은 루프에 있거나 더 많은 잠금 장치 또는 기타가있을 수 있습니다. 더 복잡하지 않고 더 길어집니다.]
T1 단계는 순서대로 (T1- 전, T1-with, T1- 후) 실행해야하고 T2 단계는 순서로 (T2- 전, T2-with, T2- 후) 실행해야합니다.
"순서대로"제약 조건 이외의 방법으로 인터리브 할 수 있습니다. 어쨌든. 위에 나열된대로 실행할 수 있습니다. 다른 유효한 순서는 (T1- 전, T2- 전, T2- 잠금, T1- 잠금, T2- 후, T1- 후)입니다. 유효한 주문이 많이 있습니다.
기다림.
이것은 6 개의 상태를 가진 상태 머신 일뿐입니다.
비 결정적 유한 상태 오토마타입니다. T2-xxx 상태와 T1-xxx 상태의 순서는 불확실하며 중요하지 않습니다. 따라서 "다음 상태"는 동전 던지기 장소입니다.
예를 들어, FSM이 시작될 때 T1- 이전 또는 T2- 이전은 모두 합법적 인 첫 번째 상태입니다. 동전을 던지세요.
T1 이전에 등장했다고 가정 해 봅시다. 그렇게. 완료되면 T1-with와 T2-fore 중 하나를 선택할 수 있습니다. 동전을 던지세요.
FSM의 각 단계에는 두 가지 선택 (두 개의 스레드-두 가지 선택)이 있으며 코인 토스는 어떤 특정 상태를 따를 수 있는지 결정할 수 있습니다.