42Seoul/philsopheres

philsopheres 문제 정리

재윤 2023. 9. 11. 16:30
반응형

규칙

  1. 한 명 이상의 철학자가 둥근 테이블에 앉아 다음과 같은 세 행동 중 하나를 취한다.

먹기, 생각하기, 잠자기

  • 철학자가 밥을 먹는 도중 → 생각, 잠 x
  • 철학자가 잠자는 도중 → 밥, 생각 x
  • 철학자가 생각하는 도중 → 밥, 잠 x
  1. 철학자들은 둥근 테이블에 앉아있으며, 가운데에는 아주 큰 스파게티 그릇이 놓여있다.
  2. 탁자 위에는 몇 개의 포크가 올려져있다. 포크의 개수는 철학자의 수와 같다.
    1. 철학자는 오른손에는 오른쪽 포크를, 왼손에는 왼쪽 포크를 들고 먹는다.
  3. 철학자가 먹기 끝남 → 포크를 탁자 위에 올려놓고 자기 시작.
    1. 자는 거 끝남 → 생각하기를 다시 시작
    2. 시뮬레이션은 철학자가 굶어 죽을 때까지 계속됨.
  4. 철학자들은 서로 대화하지 않는다.
  5. 철학자들은 다른 철학자가 죽을 것인지에 대해 알지 못 한다.
  6. 철학자들은 죽는 것을 피해야한다.

코딩 규칙

  1. 전역 변수는 금지된다.
  2. 프로그램은 같은 옵션을 가져야함

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 이상이 되면 안 됩니다. 다시 말하지만, 철학자들이 최대한 죽지 않도록 설계해야 합니다!

자 쉽게

인자

  1. 철학자의 수
  2. 철학자의 수명
    1. time_to_die 시간만큼이 지나거나, 프로그램 시작 후 time_to_die 시간만큼이 지나도록 식사를 시작하지 않으면 해당 철학자는 사망합니다.
  3. 밥을 먹는데 걸리는 시간
    1. 밥을 먹는데 걸리는 시간(밀리초 단위) : 철학자가 밥을 먹는데 걸리는 시간입니다. 해당 시간동안 철학자는 두 개의 포크를 잡고 있어야 합니다.
  4. 잠자는 시간
    1. 잠을 자는 데 소모되는 시간 입니다.
  5. 철학자가 최소한 밥을 먹어야 하는 횟수
    1. 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