diff options
| author | Dominik Kaiser | 2025-01-18 12:29:19 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2025-01-18 12:29:19 +0100 |
| commit | 6496eb33997091bc6f22191488d055dd64a978fc (patch) | |
| tree | 4e0a595b4c043759ed2e19ed3aecc363f8a43991 /philo | |
| parent | 19c377d018d7fc8d438bcce844e51c0c00e81974 (diff) | |
| download | Philosophers-6496eb33997091bc6f22191488d055dd64a978fc.tar.gz Philosophers-6496eb33997091bc6f22191488d055dd64a978fc.zip | |
Add eating to simulation
Diffstat (limited to 'philo')
| -rw-r--r-- | philo/src/main.c | 3 | ||||
| -rw-r--r-- | philo/src/simulation.c | 35 |
2 files changed, 34 insertions, 4 deletions
diff --git a/philo/src/main.c b/philo/src/main.c index 1a07271..46d1050 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 11:36:33 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 12:02:24 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,6 +78,7 @@ int main(int argc, char *argv[]) result = init(&philos, &data); if (result != EXIT_SUCCESS) return (result); + data.simulation_running = 1; result = run_simulation(data.nbr_of_philos, philos); free(philos); free(data.forks); diff --git a/philo/src/simulation.c b/philo/src/simulation.c index a64f833..b77a5d5 100644 --- a/philo/src/simulation.c +++ b/philo/src/simulation.c @@ -6,13 +6,36 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 11:55:45 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 12:26:53 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo.h" -int *process_philo(__attribute__((unused)) void *arg) +int 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) + { + 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); + } + return (EXIT_SUCCESS); +} + +int *process_philo(void *arg) { t_philo *philo; int *result; @@ -21,8 +44,14 @@ int *process_philo(__attribute__((unused)) void *arg) if (result == NULL) return (NULL); philo = (t_philo *)arg; - printf("Processing philo %d\n", philo->id); *result = EXIT_SUCCESS; + while (philo->data->simulation_running) + { + *result = eat(philo); + printf("Philo %d is sleeping\n", philo->id); + usleep(1000000); + //think + } return (result); } |
