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 는 하나의 철학자가 되어서는 안 된다.
'42seoul > philosophers' 카테고리의 다른 글
프로세스(process)와 세마포어(semaphore) 작성중 (0) | 2021.06.12 |
---|---|
스레드(thread)와 뮤텍스(mutex) (0) | 2021.06.12 |
philosopher 허용함수 정리 (0) | 2021.06.06 |