[Philosophers] 필로소퍼란?

J_JEON·2022년 8월 22일
0

Philosophers

목록 보기
1/5

운영체제의 교착(Deadlock)문제를 설명할 수 있는 철학자의 만찬문제
프로세스 스레딩의 기본을 익히고 스레드를 만들고 사용하는것을 실습할 수 있음

조건

  1. 한명이상의 철학자가 원형 테이블에 앉아 먹기, 생각하기, 잠자기 셋중 하나의 행동을 취함
  2. 철학자는 세가지 행동중 그 어떤 행동도 동시에 진행할 수 없고 한가지 행동만을 수행함
  3. 철학자들은 두개의 포크를 사용해 식사를 하며 포크는 각자의 왼쪽, 오른쪽에 하나씩 놓여있고 하나의 포크를 두 철학자가 동시에 사용할 수 없음
  4. 철학자는 절대 굶고있으면 안되며 철학자끼리 서로 그 어떤 정보도 교환해서는 안됨
  5. 철학자는 식사가 끝나면 포크를 내려놓고 잠을자기 시작함
  6. 잠을 잔 철학자는 깨어나 생각을 시작함
  7. 철학자가 한명이라도 사망할 시 프로그램은 종료되어야함
  8. 각 철학자는 스레드로 구현되어야하며 포크가 복제되지않도록 포크의 현재상태를 뮤텍스로 보호해야함
  9. 각 프로그램은 철학자의 수, 철학자의 수명, 밥을 먹는데 걸리는 시간, 잠자는 시간을 옵션으로 가져야함
    • 철학자의 수 (number_of_philosophers): 테이블에 앉아 있는 철학자의 수와 포크의 수
    • 철학자의 수명 (time_to_die): 밀리초 단위, 철학자가 마지막으로 밥을 먹은 지 'time_to_die' 시간만큼이 지나거나, 프로그램 시작 후 'time_to_die' 시간만큼이 지나면 해당 철학자는 사망
    • 밥을 먹는데 걸리는 시간 (time_to_eat) : 밀리초 단위, 철학자가 밥을 먹는 데 걸리는 시간. 해당 시간동안, 철학자는 두 개의 포크를 소유하고 있어야 함
    • 잠자는 시간 (time_to_sleep) : 밀리초 단위, 잠을 자는 데 소모되는 시간
    • 각 철학자가 최소한 밥을 먹어야 하는 횟수 (number_of_times_each_philosopher_must_eat) : 해당 인자값은 선택사항 모든 철학자가 'number_of_times_each_philosopher_must_eat' 횟수만큼 밥을 먹었다면, 시뮬레이션이 종료됩니다. 해당 값이 명시되어 있지 않다면, 철학자가 한 명이라도 사망할 때까지 시뮬레이션은 계속되어야 함
  10. 철학자들이 최대한 죽지않도록 설계해야함
profile
늅늅

0개의 댓글