🌞 잘못된 설계
Mutex : YES
Progress : NO ( P1 프로세스가 임계영역을 차지하고 나서, 나온 이후 프로세스 P2가 락을 잡지 않으면 P1 프로세스는 자리가 비어 있어도 들어가지 못한다. )
Bounded Waiting : NO ( 위의 상황이 발생을 하면 P1 프로세스는 임계구역을 차지하기 위해서 영원히 대기를 할 것이다. )
🌞 경쟁 상태
여러 프로세스들이 동시에 공유 자원에 접근하여 잘못된 결과가 나오는 상황
여러 프로세스들이 동시에 공유 데이터에 대해 접근하여 데이터 일관성을 해칠 수 있는 상황
둘 이상의 입력이나 조작이 동시에 일어나서 의도하지 않은 결과를 가져오는 상황
ANSWER : counter++, counter-- 가 하나의 기계어로 일이 일어나지 않는다. 이것은 병행 프로세스에서 공유하는 데이터를 의미없는 값으로 만든다.
공유 변수를 연산하는 코드를 임계 영역으로 설정한 후 상호배제
Busy wating과 Deadlock 없이 프로세스가 대기하는 메커니즘 제공
cf) Busy Waiting : Spin Lock처럼 계속 서서기다리는 것
병행 프로세스를 위한 바른 코딩 체크리스트
이론 : Mutex, Progress, Bounded Waiting 세개의 조건이 맞는지 본다.
Mutex(상호배제) : 임계영역은 꼭 하나의 프로세스만 들어 갈 수 있다.
Progress(진행) : 임계영역이 비어 있을 때, 임계영역에 들어가고 싶은 프로세스가 있다면 들어갈 수 있어야 한다.
Bounded Waiting(한정대기) : 여러 프로세스가 임계영역에 들어가려 할 때, 하나의 프로세스가 계속해서 임계영역을 차지해서는 안된다.