-
새니타이저! 컴파일 옵션을 넣고 돌리면, 굉장히느려진다. 이 부분 문제!
-
am_i_dead 함수안의 while문에서 millisecond 단위(sleep_for_ms(1)) 가 아닌 micro second 단위로 (usleep(1))로 변경해주어 잡았다.
-
**핵심! 무한 while 문 안에서 usleep(1) ~ usleep(10) 정도를 걸어주어서 while문의 부하를 줄여주니 수 밀리초 정도 딜레이를 유발하는 이슈가 해결되었다!!
- 인자 파싱 (parse.c)
- 인자 유효성 검사 (if (is_valid_arguments))
- 인자 설정 구조체에 저장 (parse_argument)
- 설정 구조체 t_set_up
- 실험 준비 (prepare_experiment.c)
- 설정 구조체에 실험 준비 데이터 초기화 (init_semaphore)
- 실험 진행 (run_experiment.c)
- 각 철학자를 자식 프로세스로 분기 > 철학자들의 일을 시키기
- 관리자 프로세스는 각 철학자의 프로세스가 종료되었을 때, 해당 종료코드를 통해 종료 상황을 구별하도록
- case1 : Must_eat_count 가 정해져 있고, must_eat_count로 종료되었을 때 full_philo_count == num_philo 가 되었을 때 exit (0)
- case2 : exit_code 가 someone_dead 일 때 exit(1)
- 뒷 정리
- 사용한 semaphore 닫아주기, 동적할당 한 것들 할당 해제 해주기
typedef struct s_set_up
{
int number_of_philosophers;
int time_to_die;
int time_to_eat;
int time_to_sleep;
int number_of_each_must_eat;
t_timeval time_start_experiment;
sem_t *fork_sema;
sem_t *print_sema;
sem_t *dead_sema;
} t_set_up;
typedef struct s_philo
{
int number;
int ate_count;
t_timeval time_last_ate;
t_set_up *setup;
t_status status;
} t_philo;