but 문제가 있음. counter++와 counter--는 기계어로 구현될 때,
reg1 = counter
reg1 = reg1 + 1
counter = reg1
///
reg1 = counter
reg1 = reg1 + 1
counter = reg1
요런식으로 구현이 되는데, 이 때 이 문장의 순서가 뒤죽박죽 실행되면 부정확한 값이 나올 수 있음. 이렇게 나오는 원인은 두 개 이상의 프로세스가 동시에 counter(공유변수)를 참조, 변경하기 때문
-> 따라서, 하나의 프로세스만이 공유변수에 접근, 조작할 수 있게 해야함. Soulution : Process Synchronization
- Mutual Exclusion(상호 배제): P1이 critical section 영역을 수행 중이면, 다른 프로세스들은 그 critical section에 접근 X
- Progress(진행) : critical section에 실행 중인 프로세스가 없다면, process 들 중 하나는 유한한 시간 내에 critical section 으로 진입할 수 있어야 함.
- Bounded Waiting(한정된 대기) : 프로세스가 critical section 으로 들어가기 위해서는 Starvation이 없어야 함.
->이를 모두 만족시켜야 유효한 알고리즘이라 할 수 있음.