1. 식사하는 철학자의 상황이다. 5명의 사람이 공유 자원인 밥을 먹으려면 젓가락 한 쌍이 필요하다. 5명의 철학자는 모두 동시에 배가 고프게 된 상태이다. 과연 모두가 밥을 먹게 되어 굶어 죽는 사람이 생기지 않으려면 어떻게 해야할까?

Untitled

→ 재진입 락 방식 + 모니터 락 방식에 조건변수를 추가하면 가능하다. 자바의 재진입 락 방식의 공유 변수를 이용해 무한정 대기하는 철학자가 생기지 않게끔하고, 락을 걸어 상호 배제를 한 후 한 사람이 임의의 한 쪽의 젓가락을 잡고 반대쪽의 젓가락을 이용하여 밥을 먹는다고 가정한 조건변수들을 설정하여 교착상태 또한 방지할 수 있다.

2-1. 책에 나온 Java에서 동기화를 위한 API를 기술하여라

  1. 모니터 락 방식
  2. 재진입 락 방식
  3. 카운팅 세마포 방식
  4. 조건 변수 방식

2-2. 해당 API 기술들에 대해서 간략히 기술하여라

  1. 자바 초창기 때부터 존재한 락 방식으로 wait()와 notify() 를 활용하여 진입 집합과 대기 집합으로 락을 설정하는 방법
  2. 공유 변수 설정으로 무한대기를 막으며, lock() 함수를 이용하여, 락을 사용할 수 있거나, 락 호출 스레드가 이미 락을 갖고 있는 경우(이때문에 재진입이라고 함) 제어권을 갖고 진입을 하는 것, unlock()을 finally에 두어 락 반납을 반드시 시킨다 → 예외 사항도 반납시키는 방법
  3. 하나의 원자적 상수에 대해 변경을 반영하는 경우에만 사용
  4. 모니터 방식 + 조건변수+ 재진입 락 방식을 합한 방식으로 조건변수와 락방식을 잘 연관시켜서 락을 줘야하는 방식이다.