From 8346d011dd4807601bad2de9beda7ce9006ba2c1 Mon Sep 17 00:00:00 2001 From: Denis Date: Sat, 15 May 2021 12:28:07 +0300 Subject: [PATCH] latest commit --- philo_one/includes/philo_header.h | 1 + philo_one/srcs/logic.c | 12 ++++++++++++ philo_one/srcs/prepare_simulation.c | 11 ++++++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/philo_one/includes/philo_header.h b/philo_one/includes/philo_header.h index 86802e1..79be4a3 100644 --- a/philo_one/includes/philo_header.h +++ b/philo_one/includes/philo_header.h @@ -37,6 +37,7 @@ typedef struct s_philo time_t last_eat; time_t limit; t_all *all_struct; + int is_eat; pthread_mutex_t eat_mutex; } t_philo; diff --git a/philo_one/srcs/logic.c b/philo_one/srcs/logic.c index d4b4eba..568181a 100644 --- a/philo_one/srcs/logic.c +++ b/philo_one/srcs/logic.c @@ -10,8 +10,12 @@ void *run_trhead(t_philo *philo) } if (philo->can_run_simulation) { + philo->last_eat = ft_get_time(); + philo->limit = philo->last_eat + philo->all_struct->time_to_die; while(philo->can_run_simulation) + { cycle(philo); + } } return(NULL); } @@ -69,6 +73,14 @@ int run_observer(t_all *all) i = 0; while(i <= all->number_of_philosophers) { + + if (!all->data_philo->philors[i].is_eat && ft_get_time() > all->data_philo->philors[i].limit) + { + // TODO пофиксить смерть + printf("симуляция окончена фил умер\n"); + exit(0); + } + if (all->data_philo->philors[i].died == 0) { time = ft_get_time(); diff --git a/philo_one/srcs/prepare_simulation.c b/philo_one/srcs/prepare_simulation.c index 9fd9917..b7805bc 100644 --- a/philo_one/srcs/prepare_simulation.c +++ b/philo_one/srcs/prepare_simulation.c @@ -5,7 +5,7 @@ int check_all_run(t_all *all) int i; i = 0; - while (i < all->number_of_philosophers) + while (i <= all->number_of_philosophers) { if (all->data_philo->philors[i].worked) { @@ -22,7 +22,7 @@ void run_simulation(t_all *all) int i; i = 0; - while (i < all->number_of_philosophers) + while (i <= all->number_of_philosophers) { if (!all->data_philo->philors[i].can_run_simulation) { @@ -38,7 +38,7 @@ void get_fork_for_philo(t_all *all) i = 0; - while(i < all->number_of_philosophers) + while(i <= all->number_of_philosophers) { if (i == 0) { @@ -55,6 +55,7 @@ void get_fork_for_philo(t_all *all) all->data_philo->philors[i].worked = 0; all->data_philo->philors[i].can_run_simulation = 0; all->data_philo->philors[i].all_struct = all; + all->data_philo->philors[i].is_eat = 0; i++; } } @@ -66,7 +67,7 @@ int prepare_resources(t_all *all) i = 0; all->data_philo = ft_calloc(sizeof(t_philo_data), 1); all->data_philo->mutex = (pthread_mutex_t *)ft_calloc(sizeof(pthread_mutex_t), all->number_of_philosophers); - while (i < all->number_of_philosophers) + while (i <= all->number_of_philosophers) { pthread_mutex_init(&all->data_philo->mutex[i], NULL); i++; @@ -82,7 +83,7 @@ void run_all_phils(t_all *all) i = 0; char *str; void *philo; - while(i < all->number_of_philosophers) + while(i <= all->number_of_philosophers) { if (i != 0) {