열렬히.뛰기

식사하는 철학자 2

école 42 > philosopher > philosopher : 보너스 > 식사하는 철학자 2

개요

이번에는 철학자들이 프로세스. 단 메인 프로세스는 철학자가 아니다.

모든 포크는 테이블의 한 가운데에 놓여있다고 본다.

메모리의 상태는 없으나 세마포어를 통해 포크의 갯수를 알 수 있다.

뮤텍스 vs 세마포어

  • 세마포어(Semaphore) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 여러 Process 혹은 Thread가 접근하는 것을 막아줌(즉, 동기화 대상이 하나 이상)
  • 뮤텍스(Mutex) : 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 하나의 Process 혹은 Thread가 접근하는 것을 막아줌(즉, 동기화 대상이 하나)

차이의 직관적 비교

뮤택스

  • key에 해당하는 어떠한 오브젝트가 존재.
  • 이 키를 가지고 있는 쓰레드, 프로세스 만이 공유자원에 접근 가능.

세마포어

  • 공통으로 관리하는 어떠한 값이 존재.
    • 직접적인 key는 아님.
  • 이 값을 통해 쓰레드, 프로세스의 접근을 제한.
  • 값보다 많은 수의 쓰레드, 프로세스가 자원에 동시 접근 불가

문제와의 매칭

mandatory

포크와 포크를 보호하는 뮤택스.

따라서 int 배열로 포크를 만들고, 포크를 보호하는 뮤택스를 씌어주어야 함.

(원자성 때문에 뮤택스 = 포크라고 보는 경우도 있음.)

세마포어

포크의 수를 나타내는 세마포어.