최초의 상호 배제 (Mutual Exclusion)) 알고리즘인 Dekker 알고리즘은 다음과 같다.
Process#1 |
Process#2 |
Flag1 = true; while(Flag2) { if(turn!=0) { Flag1 = false; while(turn!=0) { // busy wait } Flag1 = true; } } // Start of Critical Section ... ... turn = 1; Flag1 = false; // End of Critical Section |
Flag2 = true; while(Flag1) { if(turn!=1) { Flag2 = false; while(turn!=1) { // busy wait } Flag2 = true; } } // Start of Critical Section ... ... turn = 0; Flag2 = false; // End of Critical Section |
프로세스가 동시에 Flag1과 Flag2를 true로 할 때 임계 영역(Critical Section)을 마지막으로 실행한 프로세스가 아닌 다른 프로세스가 임계 영역을 먼저 실행한다.
Dekker 알고리즘은 하드웨어 지원 없이 소프트웨어만으로 간단하게 상호 배제를 구현할 수 있다.
하지만, Dekker 알고리즘은 2개의 프로세스에서만 사용할 수 있고 Busy Wait이 있는 단점이 있다.
Peterson 알고리즘이 좀 더 간단하다.
'컴퓨터공학' 카테고리의 다른 글
세마포어 (Semaphore) 란? (0) | 2017.09.20 |
---|---|
상호 배제 알고리즘 - Peterson 알고리즘 (0) | 2017.09.20 |
상호 배제 (Mutual Exclusion) (0) | 2017.09.19 |
[아두이노] char 배열을 String으로 변환하는 방법 (0) | 2017.09.18 |
HTML 간단한 예제와 문법 (0) | 2017.09.17 |
댓글