규칙
- 한 명 이상의 철학자가 둥근 테이블에 앉아 다음과 같은 세 행동 중 하나를 취한다.
먹기, 생각하기, 잠자기
- 철학자가 밥을 먹는 도중 → 생각, 잠 x
- 철학자가 잠자는 도중 → 밥, 생각 x
- 철학자가 생각하는 도중 → 밥, 잠 x
- 철학자들은 둥근 테이블에 앉아있으며, 가운데에는 아주 큰 스파게티 그릇이 놓여있다.
- 탁자 위에는 몇 개의 포크가 올려져있다. 포크의 개수는 철학자의 수와 같다.
- 철학자는 오른손에는 오른쪽 포크를, 왼손에는 왼쪽 포크를 들고 먹는다.
- 철학자가 먹기 끝남 → 포크를 탁자 위에 올려놓고 자기 시작.
- 자는 거 끝남 → 생각하기를 다시 시작
- 시뮬레이션은 철학자가 굶어 죽을 때까지 계속됨.
- 철학자들은 서로 대화하지 않는다.
- 철학자들은 다른 철학자가 죽을 것인지에 대해 알지 못 한다.
- 철학자들은 죽는 것을 피해야한다.
코딩 규칙
- 전역 변수는 금지된다.
- 프로그램은 같은 옵션을 가져야함
number_of_philosophers
→ 철학자의 수 == 철학자의 수와 포크의 수
→ 각 철학자는 1번 부터 number_of_philosophers 까지의 고유 번호를 가지고 있습니다.
- 철학자 번호 1은 철학자 번호 number_of_philosophers의 옆에 앉습니다. 그 외에 철학자 번호 N 은 철학자 번호 N - 1 과 철학자 번호 N + 1 사이에 앉습니다.
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]
번 이상 밥을 먹으면 시뮬레이션이 종료된다. 지정되지 않은 경우, 철학자가 죽을 때 시뮬레이션이 종료됨.
프로그램에 data races가 있어서는 안 됨.
프로그램의 로그
철학자의 상태 변화는 다음과 같이 포맷되어야 합니다:
- 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
timestamp_in_ms를 현재 타임스탬프(밀리초)로 바꾸고 X를 철학자 번호로 바꿉니다.
철학자의 상태는 다른 철학자들의 상태와 뒤엉키거나 섞인 상태로 출력되면 안 됩니다.
철학자의 사망 시점과 이를 출력하기 까지의 틈이 10ms 이상이 되면 안 됩니다. 다시 말하지만, 철학자들이 최대한 죽지 않도록 설계해야 합니다!
자 쉽게
인자
- 철학자의 수
- 철학자의 수명
- time_to_die 시간만큼이 지나거나, 프로그램 시작 후 time_to_die 시간만큼이 지나도록 식사를 시작하지 않으면 해당 철학자는 사망합니다.
- 밥을 먹는데 걸리는 시간
- 밥을 먹는데 걸리는 시간(밀리초 단위) : 철학자가 밥을 먹는데 걸리는 시간입니다. 해당 시간동안 철학자는 두 개의 포크를 잡고 있어야 합니다.
- 잠자는 시간
- 잠을 자는 데 소모되는 시간 입니다.
- 철학자가 최소한 밥을 먹어야 하는 횟수
- number_of_times_each_philosopher_must_eat 번 이상 밥을 먹으면 시뮬레이션이 종료됩니다. 지정되지 않은 경우, 철학자가 죽을 때 시뮬레이션이 종료됩니다.
'42Seoul > philsopheres' 카테고리의 다른 글
Philosophers 코드 (0) | 2023.09.11 |
---|---|
philosophers c언어 함수 (0) | 2023.09.11 |
Philosophers 데이터레이스, 교착상태, 뮤텍스 (0) | 2023.09.11 |