#include "codexion.h" # include // for usleep() static int check_if_philos_done(t_sim *sim) { t_philo **philos; t_philo *philo; int number_of_philos; int diff; (void)pthread_mutex_lock(&sim->mutex_philos); philos = sim->philos; (void)pthread_mutex_unlock(&sim->mutex_philos); (void)pthread_mutex_lock(&sim->mutex_number_of_philos); number_of_philos = sim->number_of_philos; (void)pthread_mutex_unlock(&sim->mutex_number_of_philos); while (number_of_philos-- > 0) { philo = *philos++; (void)pthread_mutex_lock(&sim->mutex_number_of_eat_required); (void)pthread_mutex_lock(&philo->mutex_number_of_eats_done); diff = philo->number_of_eats_done != sim->number_of_eat_required; (void)pthread_mutex_unlock(&philo->mutex_number_of_eats_done); (void)pthread_mutex_unlock(&sim->mutex_number_of_eat_required); if (diff != 0) return (0); } return (1); } void *monitoring_routine(void *arg) { t_sim *sim; sim = (t_sim *)arg; while (check_if_philos_done(sim) == 0) { if (check_for_starves(sim) == 1) return (NULL); usleep(100); } return (NULL); }