diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-02-15 00:36:04 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-02-15 00:36:04 +0100 |
| commit | 6a1e91750ee43fccb6160af0f44139698c8dfdc3 (patch) | |
| tree | 70a9bc690134362459c5617b0213e2822d68ed51 /philo_one/routine.c | |
| parent | f6a960c09c9593af72ff6da2c3ed501e01a0f429 (diff) | |
| download | philosophers-6a1e91750ee43fccb6160af0f44139698c8dfdc3.tar.gz philosophers-6a1e91750ee43fccb6160af0f44139698c8dfdc3.tar.bz2 philosophers-6a1e91750ee43fccb6160af0f44139698c8dfdc3.zip | |
philo_two working (again with the hack?)
Diffstat (limited to 'philo_one/routine.c')
| -rw-r--r-- | philo_one/routine.c | 63 |
1 files changed, 10 insertions, 53 deletions
diff --git a/philo_one/routine.c b/philo_one/routine.c index c9e2339..7954174 100644 --- a/philo_one/routine.c +++ b/philo_one/routine.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/10 01:11:27 by cacharle #+# #+# */ -/* Updated: 2020/02/14 21:22:52 by cacharle ### ########.fr */ +/* Updated: 2020/02/14 21:43:37 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,53 +18,23 @@ void *routine_philo(void *void_arg) pthread_t thread_death; arg = (t_routine_arg*)void_arg; - if (!arg->args->all_alive) return (NULL); arg->philo->time_last_eat = h_time_now(); if (pthread_create(&thread_death, NULL, routine_death, arg) != 0) return (NULL); - if (!arg->args->all_alive) - return (NULL); - pthread_mutex_lock(&arg->args->mutex_stdout); - if (arg->args->all_alive) - philo_think(arg->philo->id); - pthread_mutex_unlock(&arg->args->mutex_stdout); + io_think(arg); while (arg->args->all_alive) - { if (!arg->fork_left->used && !arg->fork_right->used) { - pthread_mutex_lock(&arg->fork_left->mutex); - pthread_mutex_lock(&arg->fork_right->mutex); - arg->fork_left->used = TRUE; - arg->fork_right->used = TRUE; - pthread_mutex_unlock(&arg->fork_left->mutex); - pthread_mutex_unlock(&arg->fork_right->mutex); - - arg->philo->time_last_eat = h_time_now(); - pthread_mutex_lock(&arg->args->mutex_stdout); - if (arg->args->all_alive) - philo_eat(arg->philo->id, arg->args->timeout_eat); - pthread_mutex_unlock(&arg->args->mutex_stdout); - - pthread_mutex_lock(&arg->fork_left->mutex); - pthread_mutex_lock(&arg->fork_right->mutex); - arg->fork_left->used = FALSE; - arg->fork_right->used = FALSE; - pthread_mutex_unlock(&arg->fork_left->mutex); - pthread_mutex_unlock(&arg->fork_right->mutex); - - pthread_mutex_lock(&arg->args->mutex_stdout); - if (arg->args->all_alive) - philo_sleep(arg->philo->id, arg->args->timeout_sleep); - pthread_mutex_unlock(&arg->args->mutex_stdout); - - pthread_mutex_lock(&arg->args->mutex_stdout); - if (arg->args->all_alive) - philo_think(arg->philo->id); - pthread_mutex_unlock(&arg->args->mutex_stdout); + fork_switch(arg->fork_left); + fork_switch(arg->fork_right); + io_eat(arg); + fork_switch(arg->fork_left); + fork_switch(arg->fork_right); + io_sleep(arg); + io_think(arg); } - } pthread_join(thread_death, NULL); return (NULL); } @@ -74,27 +44,14 @@ void *routine_death(void *void_arg) t_routine_arg *arg; t_time current; - /* if (!arg->args->all_alive) */ - /* return (NULL); */ arg = (t_routine_arg*)void_arg; - current = h_time_now(); - /* pthread_mutex_lock(&arg->args->mutex_stdout); */ - /* printf("===\n"); */ - /* printf("%d crr %ld\n", arg->philo->id, current); */ - /* printf("%d lst %ld\n", arg->philo->id, arg->philo->time_last_eat); */ - /* printf("%d dif %ld\n", arg->philo->id, current - arg->philo->time_last_eat); */ - /* printf("===\n"); */ - /* pthread_mutex_unlock(&arg->args->mutex_stdout); */ while (arg->args->all_alive && current - arg->philo->time_last_eat < arg->args->timeout_death) current = h_time_now(); - pthread_mutex_lock(&arg->args->mutex_stdout); + io_die(arg); pthread_mutex_lock(&arg->args->mutex_all_alive); - if (arg->args->all_alive) - philo_die(arg->philo->id); arg->args->all_alive = FALSE; pthread_mutex_unlock(&arg->args->mutex_all_alive); - pthread_mutex_unlock(&arg->args->mutex_stdout); return (NULL); } |
