aboutsummaryrefslogtreecommitdiff
path: root/philo_two/src/routine.c
diff options
context:
space:
mode:
Diffstat (limited to 'philo_two/src/routine.c')
-rw-r--r--philo_two/src/routine.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/philo_two/src/routine.c b/philo_two/src/routine.c
index 783011c..1066e97 100644
--- a/philo_two/src/routine.c
+++ b/philo_two/src/routine.c
@@ -6,44 +6,33 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/14 23:00:07 by cacharle #+# #+# */
-/* Updated: 2021/01/01 14:23:59 by charles ### ########.fr */
+/* Updated: 2021/01/02 11:59:27 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include "philo_two.h"
-inline bool philo_finished(t_philo_conf *conf)
-{
- return (!conf->all_alive ||
- (conf->meal_num != -1 &&
- conf->meal_num_finished_counter == conf->philo_num));
-}
-
void *routine_philo(t_philo *arg)
{
long int eat_counter;
pthread_t thread_death;
- if (philo_finished(arg->conf))
- return (NULL);
arg->time_last_eat = h_time_now();
if (pthread_create(&thread_death, NULL, (t_routine)routine_death, arg) != 0)
return (NULL);
eat_counter = 0;
event_think(arg);
- while (!philo_finished(arg->conf))
+ while (true)
{
event_take_fork(arg);
event_take_fork(arg);
event_eat(arg);
arg->time_last_eat = h_time_now();
- eat_counter++;
- if (!philo_finished(arg->conf) && arg->conf->meal_num != -1 &&
- eat_counter == arg->conf->meal_num)
+ if (arg->conf->meal_num != -1 && ++eat_counter == arg->conf->meal_num)
{
- sem_wait(arg->conf->sem_meal_num_finished_counter);
- arg->conf->meal_num_finished_counter++;
- sem_post(arg->conf->sem_meal_num_finished_counter);
+ sem_wait(arg->conf->sem_stdout);
+ sem_post(arg->conf->sem_finish);
+ sem_post(arg->conf->sem_stdout);
}
event_sleep(arg);
event_think(arg);
@@ -57,8 +46,7 @@ void *routine_death(t_philo *arg)
t_time current;
current = h_time_now();
- while (!philo_finished(arg->conf)
- && current - arg->time_last_eat < arg->conf->timeout_death)
+ while (current - arg->time_last_eat < arg->conf->timeout_death)
{
current = h_time_now();
usleep(200);