경쟁상황

병행처리와 병렬처리 모두 공유변수를 사용할 때 공유변수에 대한 경쟁상황이 발생한다.


동기화

  • 임계영역

    경쟁상황이 발생할 수 있는 부분들을 합쳐서 임계영역이라 부른다.

  • 상호배제

    어떤 경우에도 오직 하나의 프로세스만이 임계영역에서 실행 가능하도록 제한하는 개념이다.

동기화목적을 이루기 위해서는 특별한 기법, 장치가 필요한데 그 요구 조건을 요약하면 아래와 같다.

  • 계속진행

    임계영역을 실행 중인 프로세스가 없을 경우에는 원하는 프로세스로 하여금 곧바로 임계영역에 진입하여 계속 진행할 수 있도록 해야한다.

  • 상호배제

  • 대기한정

    상호배제를 하더라도 기아현상이 발생하면 안된다.


공통 깃발 체크 방법

공유 변수에 공통 깃발을 설정하여 0일때 한 프로세스가 실행하고 깃발을 1로 변경하고, 1이면 실행중이므로 다른 프로세스가 접근하지 못하게 하는 방법

//P0
wait: if(flag!=0)
        goto wait;
      flag = 1;
      a = a + b * c - d;
      flag = 1;

//P1
wait: if(flag!=0)
        goto wait;
      flag = 1;
      a = a - x * y + z;
      flag = 1;

만약 두 프로세스가 근소한 차이로 실행 될때 상호배제는 실패한다. wait에서 flag = 1까지 실행 도중 다른 프로세스가 실행 될 수 있다.


자기 깃발 표시 방법

공통 변수에 프로세스마다 고유의 깃발을 설정한다. 문제점은 공통 깃발과 비슷하다.


차례 지키기 방법

공통 변수에 차례 변수를 설정해서 0일경우 1번 프로세스 1일 경우 2번 프로세스 식으로 차례를 지키게 한다. 그러나 상호 배제는 지키는데 임계영역이 비어 있어도 자기 차례가 아니면 진입할 수가 없다.