Hi yoahn 개발블로그

[42Seoul / subject] Philosophers 해석 본문

42 SEOUL

[42Seoul / subject] Philosophers 해석

hi._.0seon 2021. 6. 16. 17:39
반응형

Philosophers

이 프로젝트는, 프로세스 스레딩의 기본을 배우게 된다. 여러분은 스레드를 만드는 방법을 배우고 mutex를 발견할 것이다.

 

Mandatory part

Basic rules:

  • C언어로 작성되어야 하고, Norm 규칙을 따라야 한다. 모든 leak, crash, undefined behavior, or norm error 는 0점 처리된다.
  • 여러 철학자들이 둥근 테이블에 앉아 3가지 중 하나를 하고 있다: 먹기, 생각하기, 자기
  • 먹는 동안에는 생각하거나 잘 수 없고, 자는 동안에는 먹거나 생각할 수 없고, 생각하는 동안에는 먹거나 잘 수 없다.
  • 철학자들이 앉아 있는 원형 테이블에는 중앙에 큰 보울에 스파게티가 담겨있다.
  • 탁자 위에 포크가 몇 개 있다.
  • 스파게티는 한 개의 포크로 서빙하거나 먹기 어렵기 때문에 철학자는 두 개의 포크로, 한손에 하나씩 들고 먹어야 한다고 가정한다.
  • 철학자는 굶주리지 않아야 한다.
  • 모든 철학자들은 먹어야 한다.
  • 철학자들은 다른 이들과 말할 수 없다.
  • 철학자들은 다른 철학자가 언제 죽는지 알지 못한다.
  • 철학자가 식사를 마칠 때마다, 그 철학자는 포크를 내려놓고 잠을 자기 시작할 것이다.
  • 철학자가 잠자기를 마치면, 그는 생각하기를 시작할 것이다.
  • 시뮬레이션은 한 철학자가 죽으면 멈춘다.
  • 각 프로그램마다 동일한 옵션이 있어야 한다.
    • number_of_philosophers: 철학자의 수와 포크의 수
    • time_to_die: (밀리초 단위) 철학자가 마지막 식사를 시작한 후 / 시뮬레이션 시작 후 'time_to_die' 밀리초 안에 먹지 않으면 철학자는 죽는다.
    • time_to_eat: 밀리초 단위, 철학자가 식사하는데 걸리는 시간. 그 기간 동안 두개의 포크를 보관해야 할 것이다.
    • time_to_sleep: 밀리초 단위, 철학자가 잠자는데 걸리는 시간.
    • number_of_times_each_philosopher_must_eat: 이 인자는 선택 사항이며, 이 인자가 존재하면 모든 철학자가 적어도 이 횟수만큼 먹을 경우 시뮬레이션이 중지된다.
      이 인자가 없는 경우 시뮬레이션은 철학자가 죽는 경우에만 중지된다.
  • 각 철학자에게는 1 부터 'number_of_philosophers'까지의 숫자가 주어져야 한다.
    (철학자 번호 부여)
  • 번호 1 인 철학자 옆에는 번호 'number_of_philosophers' 인 철학자가 있다.
    번호가 N인 다른 모든 철학자는 양쪽 철학자의 번호가 N - 1, N + 1 인 철학자가 앉아있다.
  • 철학자의 상태 변경은 다음과 같이 작성해야 한다. (X가 철학자의 번호, 'time_stamp_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 이상이 될 수 없다.
    (철학자가 죽고 10ms이내에 죽었다고 출력해야 한다.)
  • 철학자들은 죽는 것을 피해야 한다.
Program name philo
Turn in files philo/
Makefile Yes
Arguments (number_of_philosphers) (time_to_die) (time_to_eat) (time_to_sleep) [number_of_times_each_philosopher_must_eat]
External functs. memset, printf, malloc, free, write, usleep, gettimeofday, pthread_create, pthread_detach, pthread_join, pthread_mutex_init, pthread_mutex_destroy, pthread_mutex_lock, pthread_mutex_unlock
Libft authroized No
Description philosopher with thread and mutex

In this version the specific rules are:

  • 각 철학자들 사이에 하나의 포크, 그러므로 그들이 여러 철학자들일 경우, 각 철학자들의 오른쪽과 왼쪽에 포크가 있을 것이다.
  • 철학자가 포크를 복제하지 않도록 하려면 각 포크의 상태를 mutex로 보호해야 한다.
  • 각 철학자는 하나의 스레드이다.
반응형

'42 SEOUL' 카테고리의 다른 글

CI/CD 파이프라인  (0) 2021.08.06
[42Seoul / Philosophers(OS)] Mutex 와 Semaphore 차이  (0) 2021.06.28
[42Seoul/libasm] libasm 시작하기  (0) 2021.04.30
[42Seoul/libasm] libasm 서브젝트 번역  (0) 2021.04.30
[42Seoul] Cub3D 번역  (0) 2021.03.31
Comments