From adbe9cdb61e5d12299b8872b2ac27a48036bc95d Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 14 Feb 2020 01:42:10 +0100 Subject: WIP: philo_one running a bit --- philo_one/routine.c | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) (limited to 'philo_one/routine.c') diff --git a/philo_one/routine.c b/philo_one/routine.c index 48f3c0d..713e4ee 100644 --- a/philo_one/routine.c +++ b/philo_one/routine.c @@ -6,48 +6,58 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/10 01:11:27 by cacharle #+# #+# */ -/* Updated: 2020/02/10 01:19:13 by cacharle ### ########.fr */ +/* Updated: 2020/02/14 00:45:23 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo_one.h" -void *routine_philo(t_routine_arg *routine_arg) +void *routine_philo(void *void_arg) { - pthread_t thread_death; + t_routine_arg *arg; + pthread_t thread_death; - if (pthread_create(&thread_death, NULL, routine_death, routine_arg) != 0) + arg = (t_routine_arg*)void_arg; + if (pthread_create(&thread_death, NULL, routine_death, arg) != 0) return (NULL); - philo_think(routine_arg->philo->id); - while (routine_arg->philo->alive && !philo_starved(routine_arg->philo)) + philo_think(arg->philo->id); + while (arg->philo->alive) { - if (!routine_arg->fork_left->used && !routine_arg->fork_right->used) + if (!arg->fork_left->used && !arg->fork_right->used) { - pthread_mutex_lock(&routine_arg->fork_left->mutex); - pthread_mutex_lock(&routine_arg->fork_right->mutex); - philo_eat(routine_arg->philo->id, routine_arg->args->timeout_eat); - pthread_mutex_unlock(&routine_arg->fork_left->mutex); - pthread_mutex_unlock(&routine_arg->fork_right->mutex); - philo_sleep(routine_arg->philo->id, routine_arg->args->timeout_sleep); - philo_think(routine_arg->philo->id); + pthread_mutex_lock(&arg->fork_left->mutex); + pthread_mutex_lock(&arg->fork_right->mutex); + philo_eat(arg->philo->id, arg->args->timeout_eat); + pthread_mutex_unlock(&arg->fork_left->mutex); + pthread_mutex_unlock(&arg->fork_right->mutex); + philo_sleep(arg->philo->id, arg->args->timeout_sleep); + philo_think(arg->philo->id); } } - if (routine_arg->philo->alive) - philo_die(routine_arg->philo->id); - free(routine_arg); + if (arg->philo->alive) + philo_die(arg->philo->id); + /* pthread_join( */ + free(arg); return (NULL); } -void *routine_death(t_routine_arg *arg) +void *routine_death(void *void_arg) { + t_routine_arg *arg; + t_time current; struct timeval tv; + arg = (t_routine_arg*)void_arg; if (gettimeofday(&tv, NULL) == -1) return (NULL); + current = h_timeval_to_time(&tv); while (arg->philo->alive && - arg->philo->time_last_eat - tv.asd > arg->args->timeout_death) + current - arg->philo->time_last_eat < arg->args->timeout_death) + { if (gettimeofday(&tv, NULL) == -1) return (NULL); + current = h_timeval_to_time(&tv); + } arg->philo->alive = FALSE; return (NULL); } -- cgit