diff options
| -rw-r--r-- | philo/include/philo.h | 4 | ||||
| -rw-r--r-- | philo/src/main.c | 4 | ||||
| -rw-r--r-- | philo/src/simulation.c | 36 |
3 files changed, 37 insertions, 7 deletions
diff --git a/philo/include/philo.h b/philo/include/philo.h index 26871b9..9566136 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 11:22:15 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 11:36:45 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,6 +49,6 @@ typedef struct s_philo t_phdata *data; } t_philo; -void run_simulation(int nbr_of_philos, t_philo *philos); +int run_simulation(int nbr_of_philos, t_philo *philos); #endif diff --git a/philo/src/main.c b/philo/src/main.c index ca339bb..1a07271 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:33:45 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 11:36:33 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) result = init(&philos, &data); if (result != EXIT_SUCCESS) return (result); - run_simulation(data.nbr_of_philos, philos); + result = run_simulation(data.nbr_of_philos, philos); free(philos); free(data.forks); return (result); diff --git a/philo/src/simulation.c b/philo/src/simulation.c index a30c7d2..a64f833 100644 --- a/philo/src/simulation.c +++ b/philo/src/simulation.c @@ -6,21 +6,51 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/18 11:26:17 by dkaiser ### ########.fr */ +/* Updated: 2025/01/18 11:55:45 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #include "philo.h" +int *process_philo(__attribute__((unused)) void *arg) +{ + t_philo *philo; + int *result; + + result = malloc(sizeof(int)); + if (result == NULL) + return (NULL); + philo = (t_philo *)arg; + printf("Processing philo %d\n", philo->id); + *result = EXIT_SUCCESS; + return (result); +} -void run_simulation(int nbr_of_philos, __attribute__((unused))t_philo *philos) +int run_simulation(int nbr_of_philos, t_philo *philos) { int i; + int result; + void *retval; i = 0; + result = EXIT_SUCCESS; while (i < nbr_of_philos) { - printf("Philo %d\n", i); + result = pthread_create(&(philos[i].thread), NULL, (void*) process_philo, &philos[i]); + if (result != 0) + break; i++; } + while (i--) + { + pthread_join(philos[i].thread, &retval); + if (retval == NULL) + result = ft_err(ERR_MALLOC); + else if (*(int *)retval != EXIT_SUCCESS) + { + result = *(int *)retval; + free(retval); + } + } + return (result); } |
