diff options
| author | Dominik Kaiser | 2025-01-18 12:41:50 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2025-01-18 12:41:50 +0100 |
| commit | e3c8f02a98c2cbf73266bf232c0fb38e48adcd06 (patch) | |
| tree | 345710b1176b3c978b59a3bab84ed72f3d9d5ca2 /philo/src | |
| parent | 6496eb33997091bc6f22191488d055dd64a978fc (diff) | |
| download | Philosophers-e3c8f02a98c2cbf73266bf232c0fb38e48adcd06.tar.gz Philosophers-e3c8f02a98c2cbf73266bf232c0fb38e48adcd06.zip | |
Add rudimentary think and sleep funcs
Diffstat (limited to 'philo/src')
| -rw-r--r-- | philo/src/simulation.c | 46 |
1 files 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 <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 12:26:53 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 12:41:31 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo.h" -int eat(t_philo *philo) +void philo_eat(t_philo *philo) { t_fork *left_fork; t_fork *right_fork; left_fork = &philo->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); } |
