0. 프로젝트 요약
In this project, you will learn the basics of threading a process. You will
learn how to make threads. You will discover the mutex.
프로세스 스레딩의 기본, 스레드를 만드는 방법, 뮤텍스
1. Mandatory
- 규칙
- 한명 또는 여러명의 철학자가 둥근 테이블에 앉아서 3가지 행동을 한다. (먹기, 생각하기, 자기)
- 한 행동을 하고있으면 나머지 행동은 하지 않는다.
- 둥근 테이블 중앙에는 스파게티 한 그릇이 있다.
- 테이블에는 포크가 있다.
- 스파게티는 양손에 포크를 쥐고 먹어야한다.
- 철학자는 굶주리면 안된다.
- 모든 철학자는 먹어야한다.
- 철학자는 서로 얘기하지 않는다.
- 철학자는 다른 철학자가 죽는지 알지 못한다.
- 철학자가 다 먹고 나면 포크를 내려놓고 꿀잠잔다.
- 철학자가 잠을 다 자고 나면 생각하기를 시작한다.
- 철학자가 한명 죽으면 시뮬레이션이 멈춘다.
- 인자 (Argument) 아래와 같은 순서로 주어진다.
- nubmer_of_philosophers : 철학자 인원, 포크 개수
- time_to_die : 밀리초 단위, 마지막 식사 또는 시뮬레이션 시작 이후로 time_to_die 밀리 초 이후로 죽는다.
- time_to_eat : 밀리초 단위, 철학자가 먹는데 걸리는 시간. 이 시간동안 포크 2개를 가지고 있는다.
- time_to_sleep : 밀리초 단위, 철학자가 자는데 걸리는 시간
- number_of_times_each_philosopher_must_eat: 옵션, 모든 철학자가 적어도number_of_times_each_philosopher_muset_eat 만큼 먹었다면, 시뮬레이션이 종료된다.
- 각각 철학자는 1부터 number_of_philosophers 만큼 숫자가 주어진다.
- 철학자 N 은 N - 1 과 N + 1 사이에 앉아있다. 철학자 1 은 철학자 number_of_philosophers 옆에 있다.
- 철학자가하는 행동은 다음과 같이 출력된다. (X 는 철학자 번호)
- timestamp_in_ms X has taken a fork
- timestamp_in_ms X is eating
- timestamp_in_ms X is sleeping
- timestamp_in_ms X is thinking
- timestamp_in_ms X died
- 출력되는 문장은 다른 문장과 겹치거나 얽히면 안된다.
- 철학자가 죽을때는 실제로 출력되기 까지 10ms 이상 걸리면 안된다.
- 철학자는 죽는걸 피해야한다.
- 포크는 철학자 사이에 하나씩 있다.
- 포크가 복사되는걸 방지 하기 위해서 포크의 상태를 mutex 로 보호해야한다.
- 각 철학자는 쓰레드 이어야한다.
- 요약
- 철학자는 둥근 테이블에 모여 앉아있는데 각 철학자 사이에는 포크 하나씩 있다.
- 철학자는 먹고 자고 생각하기를 한다.
- 근데 먹을때는 포크2개로 스파게티를 먹어야한다.
- 따라서 한명이 먹고있을때는 다른 한명은 먹지 못한다.
- 그러다가 철학자 한명이 굶어 죽으면 시뮬레이션이 종료된다.