상세 컨텐츠

본문 제목

2020.11.17 뮤텍스(Mutex), 세마포어(Semaphore) 모니터

기술사/2020

by MustThanks 2020. 11. 16. 18:42

본문

반응형

Mutex(뮤텍스), Semaphore(세마포어),모니터(Monitor)

= 자원에 대한 동시 접근을 방지하여 원활한 자원 분배가 될 수 있는 동기화 기법



Semaphore(세마포어 - 상호 배제)
- 자원 접근에 대한 동기화 기법
- Mutex는 하나의 task(thread)에 대해서 자원에 대한 접근을 허용하나 Semaphor는 여러개의 Task(thread)가 접근이 가능
- 일반적으로 wait와 signal로 표현

=======================예제=============

//Critical Section에 접근가능한 thread 수
int count = 3; 

void wait(int count)
{
    count--;

    bool loop=true;
    while(loop)
   {
      if(count>0) loop=false;  //count가 0보다 크면 사용할 queue 있음
      else      sleep(10);        //사용해야하는 queue가 나올 때 까지 기다리는 것

    }

}

void signal(int count)
{
   count++;
  
   bool loop=true;

   while(loop)
   {
       if(count<0) sleep(10); //count 가 0보다 커질 때 까지 대기(사용할 queue 가 없음)
       else loop=false;
   }

}

===================

wait(count)

//Critical Section의 자원을 접근하기위한 허락을 받음
Critical_Section()

signal(count)

============================================================

Mutex(뮤텍스 - 상호배제)
 - Locking 과 Unlocking을 통한 자원 사용

 - Cirtical Section(임계영역)을 가지 task들이 Runntime에 동시에 자원에 접근하지 않게 자원 사용을 독점
 - mutil processes 의 Share Resource에 대한 동시 접근 방지

 - Mutex는 Semaphore의 바이너리 값을 갖음


=========== 예제 ===================
bool locked = true

void Access()
{

       //locked 값을 통해서 자원을 선점(cirtical section)
        while(locked)   
        {
               .....
               .....
               .....

  if(!locked) break;  // locked 값을 (false)을 확인하고 자원을 반납

        }

        locked = true;  // 자원을 선점하기 위해서 값을 변경

}


void escape()
{
   locked = false; //작업이 완료 되었음을 확인
}

=========================================


Monitor(모니터)
- 하나의 process 내에서 Thread간의 동기화에 사용
- 프레임워크나 라이브러리로 제공
- c 언어는 현재(2020) 없고 Java는 있음
- synchronized, wait(), notify()를 통해 동기화 가능
- java method앞에 synchronized를 붙여(추가) 동기화(상호배제) 함수가 작성됨


================= 예제 ==========

synchronized void methods()
{

}

================================

 

제122회 정보관리기술사(2020년).pdf
0.24MB

관련글 더보기

댓글 영역