42Seoul 과제 중 하나인 Philosophers 과제 요구 사항을 정리한 포스트이다.
과제를 성공적으로 수행하기 위해 알아야할 사항
mandatory part에 대한 프로그램을 작성하고 bonus part를 수행하기로 결정한 경우 bonus part에 대해 다른 프로그램을 작성해야 한다.
또한 둘 다 다음 규칙을 준수해야 한다.
number_of_philosophers
, time_to_die
, time_to_eat
, time_to_sleep
,[number_of_times_each_philosopher_must_eat]
number_of_philosophers
: 철학자의 수와 포크의 수time_to_die(in miliseconds)
: 마지막 식사가 시작된 이후 또는 시뮬레이션이 시작된 이후 철학자가 time_to_die
ms 이내에 먹기 시작하지 않는다면 죽는다.time_to_eat(in miliseconds)
: 철학자가 식사하는 데 걸리는 시간이며, 그 시간 동안 두 개의 포크를 잡아야 한다.time_to_sleep(in miliseconds)
: 철학자가 잠을 자는 시간number_of_times_each_philosopher_must_eat(optional argument)
: 모든 철학자가 최소 number_of_times_each_philosopher_must_eat
시간 이상을 먹었다면(이 시간 내에 모두 살아있다면) 시뮬레이션이 중지됩니다. 지정하지 않으면 철학자는 죽을 때 시뮬레이션이 중지된다.number_of_philosophers
까지의 숫자를 갖는다.number_of_philosophers
옆에 있습니다.프로그램 로그 정보:
철학자의 상태 변경은 다음과 같이 형식화되어야 한다.
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
: 현재 타임스탬프(milisecond)
X: 철학자 번호
표시된 상태 메시지는 다른 메시지와 섞여서는 안된다.
철학자가 죽고나서, 철학자가 사망했음을 알리는 메시지는 10ms 이내에 표시되어야 한다.
철학자는 죽음을 피해야 한다!
프로그램에 데이터 레이스(data race)가 없어야 한다.
즉, 2개 이상의 쓰레드(Thread)에서 동시에 같은 데이터의 값을 수정하면 안된다.
항목 | 요구사항 |
---|---|
Program name | philo |
Turn in files | Makefile, *.h, *.c, in directory philo/ |
Makefile | NAME, all, clean, fclean, re |
Arguments | number_of_philosophers , 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 authorized | No |
Description | Philosophers with threads and mutexes |
mandatory part 대한 구체적인 규칙:
항목 | 요구사항 |
---|---|
Program name | philo_bonus |
Turn in files | Makefile, *.h, *.c, in directory philo_bonus/ |
Makefile | NAME, all, clean, fclean, re |
Arguments | number_of_philosophers , time_to_die , time_to_eat , time_to_sleep , [number_of_times_each_philosopher_must_eat] |
External functs. | memset , printf , malloc , free , write , fork , kill , exit , pthread_create , pthread_detach , pthread_join , usleep , gettimeofday , waitpid , sem_open , sem_close , sem_post , sem_wait , sem_unlink |
Libft authorized | No |
Description | Philosophers with threads and semaphores |
bonus part의 프로그램은 mandatory part 프로그램과 동일한 argument들를 사용힌다.
global rules 부분의 요구 사항을 준수해야 한다.
bonus part에 대한 구체적인 규칙: