예시)
➡️ count 변수를 2개의 프로세스가 접근하여 증가시키는 상황이다. 증가하는 로직은 그림과 같이 3가지의 기계어 명령으로 구성되어 있다.
➡️ 명령어를 수행 중에 interrupt가 되면 count의 값이 예상과 다르게 나올 수 있다. => Data Inconsistency
2개 이상의 process가 동시에 Critical Section에 진입하는 것을 방지하는 것
Process Synchronization이 필요하다.
Mutual Exclusion(상호배제)
Progress(진행) => 무기한 대기 X
Bounded Waiting(한정대기)
➡️ Mutual Exclusion 조건을 만족하지 못한다.
예시 상황)
1. flag[0], flag[1] 둘다 False
2. P0가 flag[0] = True 전에 interrupt
3. p1 실행이 되고 flag[1] = True를 하고 Critical Section에 진입
4. p1이 Critical Section에서 interrupt
5. 다시 p[0]가 실행되고 flag[0] = True로 만들고 Critical Section에 진입
즉, p0, p1 둘 다 Critical Section에 진입이 되어 상호 배제 조건 만족 불가능
➡️ 진행되어야 된다는 조건을 만족하지 못한다.
예시 상황)
1. flag[0], flag[1] 둘다 False
2. p0가 flag[0] = True로 만들고 interrupt
3. p1이 실행되면 flag[1]=True하고 while에서 대기 => time quantum 등을 소모
4. p0이 실행되면 while에서 대기
즉, p0, p1 둘 다 Critical Section에 진입 불가