원래 해결법에서는 짝수가 왼쪽을 들고,,? 홀수가 오른쪽을 든다..? 이렇게 접근을 하게 되는데 나는 이렇게 하지 않았다. 그냥 홀수가 먼저 먹게 하고 짝수가 먼저 먹게 하였다. 헤더 파일 info가 크게 있고 이 안에 필로들이 다 있다. typedef struct s_philo { intphilo_name; intfork_left; intfork_right; long intthread_time; long intlast_eat; inteat; pthread_tthread; pthread_mutex_teye; struct s_info*info; }t_philo; typedef struct s_info { intphilo_number; inttime_to_die; inttime_to_eat; inttime_..
philosophers
들어가기 전에 교착 상태(데드락) → 뮤텍스(상호배제) 데이터 레이스 2가지를 공부하고 들어가자. 1. 교착 상태(데드락) → 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태. 무한히 다음 자원을 기다리게 되는 상태를 말한다. 쉽게 말해서 프로세스가 자기가 원하는 자원이 있는데 다른 사람이 계속 가지고 있어 무한히 wait 상태에 빠지는 것을 말한다. 데드락의 발생 조건 상호 배제 ( mutual exclusion ) : 자원에 대한 배타적 통제권 점유 대기( hold and wait ) : 할당된 자원을 점유한 상태로 다른 자원을 대기 비선점 ( no preemtion ) : 자원이 점유 해제되기 전에 선점할 수 없음 순환 대기 ( circular wait ) ..
규칙 한 명 이상의 철학자가 둥근 테이블에 앉아 다음과 같은 세 행동 중 하나를 취한다. 먹기, 생각하기, 잠자기 철학자가 밥을 먹는 도중 → 생각, 잠 x 철학자가 잠자는 도중 → 밥, 생각 x 철학자가 생각하는 도중 → 밥, 잠 x 철학자들은 둥근 테이블에 앉아있으며, 가운데에는 아주 큰 스파게티 그릇이 놓여있다. 탁자 위에는 몇 개의 포크가 올려져있다. 포크의 개수는 철학자의 수와 같다. 철학자는 오른손에는 오른쪽 포크를, 왼손에는 왼쪽 포크를 들고 먹는다. 철학자가 먹기 끝남 → 포크를 탁자 위에 올려놓고 자기 시작. 자는 거 끝남 → 생각하기를 다시 시작 시뮬레이션은 철학자가 굶어 죽을 때까지 계속됨. 철학자들은 서로 대화하지 않는다. 철학자들은 다른 철학자가 죽을 것인지에 대해 알지 못 한다...