2017년 4월 18일 화요일

11. 프로세스 동기화(Process Synchronization)2


2) 세마포(Semaphore)
  * 열차의 진행/정지 신호(차단기)
  * 네달란드의 다익스트라(Dijkstra)가 제안함
    : 상호배제(Mutual Exclusion) 문제의 해결 방안
    : 음이 아닌 정수 값을 갖는 플래그 변수
  * 동기화 문제를 해결하기 위한 소프트웨어 기법
  * 1개의 정수 변수와 두 개의 함수로 구성
   : int value (초기값 = 1)
   : P ( Proberen = test ) => acquire()
   : V ( Verhogen = increment ) => release()

====================
void acquire() {
       value--;
       if (value < 0) {
                add this process to list;
                block;
       }
}

void release() {
       value++;
       if (value <= 0) {
                remove a process P from list;
                wakeup P;
       }
}
====================
 
Semaphore  
    * Process A => acquire() 호출: value = 0 이면 Critical Section 진입.
    * Process B => acquire() 호출: value < 0 이면 세마포어 큐에 갇힘.
    * Process A => release() 호출: 세마포어 큐에 있는 Process B를 풀어줌

댓글 없음:

댓글 쓰기