From e3c8f02a98c2cbf73266bf232c0fb38e48adcd06 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Sat, 18 Jan 2025 12:41:50 +0100 Subject: [PATCH] Add rudimentary think and sleep funcs --- philo/src/simulation.c | 46 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/philo/src/simulation.c b/philo/src/simulation.c index b77a5d5..54ac8e5 100644 --- a/philo/src/simulation.c +++ b/philo/src/simulation.c @@ -6,33 +6,44 @@ /* By: dkaiser data->forks[philo->id]; right_fork = &philo->data->forks[(philo->id + 1) % philo->data->nbr_of_philos]; - if (left_fork->available && right_fork->available) + while (!left_fork->available || !right_fork->available) { - pthread_mutex_lock(&left_fork->mutex); - pthread_mutex_lock(&right_fork->mutex); - left_fork->available = 0; - right_fork->available = 0; - printf("Philo %d is eating\n", philo->id); - usleep(1000000); - left_fork->available = 1; - right_fork->available = 1; - pthread_mutex_unlock(&left_fork->mutex); - pthread_mutex_unlock(&right_fork->mutex); + // die if waiting too long } - return (EXIT_SUCCESS); + pthread_mutex_lock(&left_fork->mutex); + pthread_mutex_lock(&right_fork->mutex); + left_fork->available = 0; + right_fork->available = 0; + printf("Philo %d is eating\n", philo->id); + usleep(1000000); + left_fork->available = 1; + right_fork->available = 1; + pthread_mutex_unlock(&left_fork->mutex); + pthread_mutex_unlock(&right_fork->mutex); +} + +void philo_sleep(t_philo *philo) +{ + printf("Philo %d is sleeping\n", philo->id); + usleep(1000000); +} + +void philo_think(t_philo *philo) +{ + printf("Philo %d is thinking\n", philo->id); } int *process_philo(void *arg) @@ -47,10 +58,9 @@ int *process_philo(void *arg) *result = EXIT_SUCCESS; while (philo->data->simulation_running) { - *result = eat(philo); - printf("Philo %d is sleeping\n", philo->id); - usleep(1000000); - //think + philo_eat(philo); + philo_sleep(philo); + philo_think(philo); } return (result); } -- 2.47.2