[42] Philosophers

KURTY·2023년 2월 27일
0

42_SEOUL

목록 보기
9/9

Variables

number_of_philosophers (철학자의 수)

테이블에 앉아 있는 철학자의 수와 포크의 수.

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' 횟수만큼 밥을 먹었다면, 시뮬레이션이 종료됩니다. 해당 값이 명시되어 있지 않다면, 철학자가 한 명이라도 사망할 때까지 시뮬레이션은 계속됩니다.

Functions

usleep

코드의 실행을 늦추는 함수. 마이크로초를 기반으로 하며 밀리초로 바꾸려면 원하는 밀리초 * 1000으로 사용한다.

ex)

while (1) {
	print(hello)
	usleep(1000 * 1000)
}

// 1초마다 출력하기

gettimeofday

#include <sys/time.h>

int gettimeofday(struct timeval &restrict tp, void *restrict tzp);

_STRUCT_TIMEVAL
{
 __darwin_time_t tv_sec;
 __darwin_suseconds_t tv_usec;
};

현재 시간을 가져오고 시스템의 시간값을 설정한다.

Evaluation

./philo 1 800 200 200

철학자는 먹지 말고 죽어야 한다

./philo 5 800 200 200

아무도 죽지 않아야 한다

./philo 5 800 200 200 7

아무도 죽지 않아야 하며 모든 철학자가 각각 적어도 7번 먹었을 때 시뮬레이션을 중지해야 한다

./philo 4 410 200 200

아무도 죽지 않아야 한다

./philo 4 310 200 100

철학자는 죽어야 한다

profile
진짜 공부하자

0개의 댓글