/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* threads.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lfirmin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/22 15:42:23 by lfirmin #+# #+# */ /* Updated: 2024/11/22 15:44:44 by lfirmin ### ########.fr */ /* */ /* ************************************************************************** */ #include "../include/philo.h" int create_threads(t_data *data) { int i; pthread_t *threads; i = 0; threads = malloc(sizeof(pthread_t) * data->nb_philo); if (!threads) return (1); while (i < data->nb_philo) { if (pthread_create(&data->philos[i].thread, NULL, &philo_routine, &data->philos[i])) { pthread_mutex_lock(&data->dead_mutex); data->dead_flag = 1; pthread_mutex_unlock(&data->dead_mutex); return (free(threads), 1); } threads[i] = data->philos[i].thread; i++; } i = 0; while (i < data->nb_philo) pthread_join(threads[i++], NULL); return (free(threads), 0); }