더북(TheBook)

1.14 세마포어

 

 

뮤텍스나 임계 영역은 오로지 스레드 1개만 자원을 액세스할 수 있게 합니다. 하지만 세마포어는 원하는 개수의 스레드가 자원을 액세스할 수 있게 합니다.

다음 예시 코드를 봅시다.

Semaphore sema1;
 
void Main()
{
  // 스레드 2개만 자원을 액세스할 수 있게 제한한다.
  sema1 = new Semaphore(2);
}
 
void Thread1()
{
  // 리소스를 액세스할 수 있을 때까지 기다린다.
  sema1.Wait();
 
  // 리소스 액세스가 다 끝났음을 세마포어에 알린다.
  sema1.Release();
}
 
void Thread2()
{
  // 리소스를 액세스할 수 있을 때까지 기다린다.
  sema1.Wait();
 
  // 리소스 액세스가 다 끝났음을 세마포어에 알린다.
  sema1.Release();
}
 
void Thread3()
{
  // 리소스를 액세스할 수 있을 때까지 기다린다.
  sema1.Wait();
 
  // 리소스 액세스가 다 끝났음을 세마포어에 알린다.
  sema1.Release();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.