42seoul/philosophers

philosopher subject

syom 2021. 6. 6. 20:53

Mandatory

3개의 다른 프로그램을 작성해야 하지만 기본 규칙은 동일합니다.

  • 본 프로젝트는 본 표준에 따라 C로 코딩되어야 한다. Norm. Any leak, crash, undefined behavior or norm error 는 프로젝트에 0점을 의미합니다.
  • 많은 철학자들이 원탁에 앉아 식사, 생각 또는 잠의 세 가지 중 하나를 하고 있다.
  • 먹는 동안, 그들은 생각하거나 잠을 자지 않고, 자는 동안, 먹거나 생각하지 않으며, 물론 생각하는 동안, 먹거나 자는 것이 아니다.
  • 철학자들은 큰 스파게티 그릇이 중앙에 있는 원형 테이블에 앉는다.
  • 테이블 위에 포크가 몇 개 있습니다.
  • 스파게티는 하나의 포크로 제공 및 먹기가 어렵기 때문에 철학자는 두 개의 포크로, 한 손에 하나씩 먹어야 한다고 가정한다.
  • 철학자들은 결코 굶주려서는 안 된다.
  • 모든 철학자는 식사를 해야 한다.
  • 철학자들은 서로 말을 하지 않는다.
  • 철학자들은 또 다른 철학자가 언제 죽을지 모른다.
  • 철학자가 식사를 마칠 때마다, 그는 포크를 떨어뜨리고 잠을 자기 시작할 것이다.
  • 철학자가 잠을 다 자고 나면, 그는 생각하기 시작할 것이다.
  • 철학자가 사망할 때 시뮬레이션이 중단됩니다.
  • 각 프로그램에는 동일한 옵션이 있어야 한다:
    • number_of_philosphers
    • time_to_die
    • time_to_eat
    • time_to_sleep
    • number_of_times_each_philosopher_must_eat
  • number_of_philosophers : 철학자 수이자 포크 수이다.
  • time_to_die: ms(밀리초)입니다. 철학자가 마지막 식사를 시작한 후 또는 시뮬레이션 시작 후 'time_to_die'까지 먹지 않으면 죽습니다.
  • time_to_eat: 는 밀리초 단위로 철학자가 먹는 데 걸리는 시간이다. 그 기간 동안 그는 두 개의 포크를 보관해야 할 것이다.
  • time_to_sleep: 는 밀리초 단위로 철학자가 잠을 자는 시간을 말한다.
  • number_of_times_each_philosopher_must_eat: 인수는 선택 사항이며, 모든 철학자가 적어도 'number_of_times_each_philosopher_must_eat'을 먹을 경우 시뮬레이션은 중지됩니다. 명시되지 않은 경우, 시뮬레이션은 철학자의 죽음에서만 중단됩니다.
  • 각 철학자에게는 1부터 'number_of_philosophers' 까지의 번호가 부여되어야 한다.
  • 철학자의 숫자 1은 철학자의 숫자 'number_of_philosophers' 옆에 있다. 숫자 N을 가진 다른 철학자는 철학자 N - 1과 철학자 N + 1 사이에 앉는다.
  • 철학자의 상태 변경은 다음과 같이 작성되어야 합니다(X는 철학자 번호로 대체되고 timestamp_in_ms 는 현재 타임스탬프(밀리초 단위).
  • ◦ 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를 초과할 수 없습니다.
  • 철학자들은 죽음을 피해야 한다!

Philo_one

  • 각 철학자들 사이에 하나의 포크, 따라서 각 철학자들의 오른쪽과 왼쪽에 포크가 있을 것이다.
  • 철학자가 포크를 복제하지 않도록 하려면 각 포크의 mutex 로 포크 상태를 보호해야 합니다.
  • 각 철학자는 thread 이어야 한다.

Philo_two

  • 모든 포크는 테이블 중앙에 있습니다.
  • 메모리에 상태가 없지만 사용 가능한 포크 수는 semaphore 로 표시됩니다.
  • 각 철학자는 thread 이어야 한다.

Philo_three

  • 모든 포크는 테이블 중앙에 있습니다.
  • 메모리에 상태가 없지만 사용 가능한 포크 수는 semaphore 로 표시됩니다.
  • 각 철학자는 하나의 process 이어야 하며 main process 는 하나의 철학자가 되어서는 안 된다.