diff options
| author | Dominik Kaiser | 2025-01-18 17:11:11 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2025-01-18 17:11:11 +0100 |
| commit | 0813f4153af4723d3fddffea6926243f3a94fa57 (patch) | |
| tree | 4d0c28ccea57b0444d1ebe82c5b0f9ab78b1e872 | |
| parent | 22e40654fadb2373697742e0ff8deb6ad87c6601 (diff) | |
| download | Philosophers-0813f4153af4723d3fddffea6926243f3a94fa57.tar.gz Philosophers-0813f4153af4723d3fddffea6926243f3a94fa57.zip | |
Outsource checking for philos_must_eat to main thread
| -rw-r--r-- | philo/include/philo.h | 4 | ||||
| -rw-r--r-- | philo/src/main.c | 4 | ||||
| -rw-r--r-- | philo/src/simulation.c | 11 |
3 files changed, 11 insertions, 8 deletions
diff --git a/philo/include/philo.h b/philo/include/philo.h index b4db15b..fbcf53f 100644 --- a/philo/include/philo.h +++ b/philo/include/philo.h @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/17 10:23:19 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 16:57:23 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 17:09:50 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,6 +51,6 @@ typedef struct s_philo t_phdata *data; } t_philo; -int run_simulation(int nbr_of_philos, t_philo *philos); +int run_simulation(int nbr_of_philos, t_philo *philos, t_phdata *data); #endif diff --git a/philo/src/main.c b/philo/src/main.c index be9e1b7..879bf0b 100644 --- a/philo/src/main.c +++ b/philo/src/main.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/14 17:13:30 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 16:59:24 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 17:09:26 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -92,7 +92,7 @@ int main(int argc, char *argv[]) if (result != EXIT_SUCCESS) return (result); data.simulation_running = 1; - result = run_simulation(data.nbr_of_philos, philos); + result = run_simulation(data.nbr_of_philos, philos, &data); free(philos); free(data.forks); return (result); diff --git a/philo/src/simulation.c b/philo/src/simulation.c index 75bbe12..fa8e886 100644 --- a/philo/src/simulation.c +++ b/philo/src/simulation.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 17:02:27 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 17:09:34 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,8 +106,6 @@ int *process_philo(void *arg) { pthread_mutex_lock(&philo->data->pme_mutex); philo->data->philos_must_eat -= 1; - if (philo->data->philos_must_eat <= 0) - philo->data->simulation_running = 0; pthread_mutex_unlock(&philo->data->pme_mutex); } if (!philo->data->simulation_running) @@ -120,7 +118,7 @@ int *process_philo(void *arg) return (result); } -int run_simulation(int nbr_of_philos, t_philo *philos) +int run_simulation(int nbr_of_philos, t_philo *philos, t_phdata *data) { int i; int result; @@ -135,6 +133,11 @@ int run_simulation(int nbr_of_philos, t_philo *philos) break; i++; } + while (data->simulation_running) + { + if (data->philos_must_eat <= 0) + data->simulation_running = 0; + } while (i--) { pthread_join(philos[i].thread, &retval); |
