From b1db9fe912cb686e1af919f02025fd725b6e384a Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 14 May 2021 18:01:41 +0300 Subject: [PATCH] add logging --- philo_one/includes/philo_header.h | 5 ++- philo_one/srcs/logic.c | 53 +++++++++++++++++++++++-------- philo_one/srcs/utilc.c | 1 - 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/philo_one/includes/philo_header.h b/philo_one/includes/philo_header.h index 6bf6a49..86802e1 100644 --- a/philo_one/includes/philo_header.h +++ b/philo_one/includes/philo_header.h @@ -34,8 +34,10 @@ typedef struct s_philo time_t time_to_die; int died; int nbr_philo; + time_t last_eat; + time_t limit; t_all *all_struct; - pthread_mutex_t *eat_mutex; + pthread_mutex_t eat_mutex; } t_philo; typedef struct s_philo_data @@ -60,4 +62,5 @@ int check_all_run(t_all *all); void run_simulation(t_all *all); void run_all_phils(t_all *all); void messages(t_all *all, t_philo *philo, char *str); +void cycle(t_philo *philo); #endif diff --git a/philo_one/srcs/logic.c b/philo_one/srcs/logic.c index b57864f..d4b4eba 100644 --- a/philo_one/srcs/logic.c +++ b/philo_one/srcs/logic.c @@ -3,29 +3,57 @@ void *run_trhead(t_philo *philo) { philo->worked = 1; - while(1) { if (philo->can_run_simulation) break; } - while(!philo->died) + if (philo->can_run_simulation) { - messages(philo->all_struct, philo, "я могу что то делать ура"); + while(philo->can_run_simulation) + cycle(philo); } return(NULL); } - -void philo_think(t_all *all, int i) +void take_forks(t_philo *philo) { - time_t time; - - pthread_mutex_lock(&all->data_philo->mutex[all->data_philo->philors[i].less_fork]); - pthread_mutex_lock(&all->data_philo->mutex[all->data_philo->philors[i].more_fork]); - time = ft_get_time(); - time = ft_get_time(); + t_all *all; + all = philo->all_struct; + pthread_mutex_lock(&all->data_philo->mutex[philo->less_fork]); + messages(philo->all_struct, philo, "has taken a fork]"); + pthread_mutex_lock(&all->data_philo->mutex[philo->more_fork]); + messages(philo->all_struct, philo, "has taken a fork]"); } +void eating(t_philo *philo) +{ + pthread_mutex_lock(&philo->eat_mutex); + philo->last_eat = ft_get_time(); + philo->limit = philo->last_eat + philo->all_struct->time_to_die; + messages(philo->all_struct, philo, "eating"); + usleep(philo->all_struct->time_to_eat * 1000); + philo->count_eat++; + pthread_mutex_unlock(&philo->eat_mutex); +} +void sleeping(t_philo *philo) +{ + t_all *all; + all = philo->all_struct; + messages(philo->all_struct, philo, "sleeping"); + pthread_mutex_unlock(&all->data_philo->mutex[philo->more_fork]); + pthread_mutex_unlock(&all->data_philo->mutex[philo->less_fork]); + usleep(philo->all_struct->time_to_sleep * 1000); +} + + +void cycle(t_philo *philo) +{ + take_forks(philo); + eating(philo); + sleeping(philo); + messages(philo->all_struct, philo, "thinking"); +} + int run_observer(t_all *all) { @@ -44,7 +72,6 @@ int run_observer(t_all *all) if (all->data_philo->philors[i].died == 0) { time = ft_get_time(); - // printf("%ld\n", time - all->start_time); i++; } else @@ -68,10 +95,10 @@ int runner(t_all *all, int optional) if (optional) { prepare_resources(all); - all->start_time = ft_get_time(); run_all_phils(all); if (check_all_run(all)) { + all->start_time = ft_get_time(); run_simulation(all); } if (!run_observer(all)) diff --git a/philo_one/srcs/utilc.c b/philo_one/srcs/utilc.c index 43f0ca6..18d6bf8 100644 --- a/philo_one/srcs/utilc.c +++ b/philo_one/srcs/utilc.c @@ -66,7 +66,6 @@ t_all *structalloc_and_bzero(void) all->time_to_eat = -1; all->time_to_sleep = -1; all->number_of_times_each_philosopher_must_eat = -1; - all->start_time = ft_get_time(); return(all); }