/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* init.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lfirmin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/22 14:20:46 by lfirmin #+# #+# */ /* Updated: 2025/03/17 04:12:57 by lfirmin ### ########.fr */ /* */ /* ************************************************************************** */ #include "../include/philo.h" int init_forks(t_data *data) { int i; i = 0; while (i < data->nb_philo) { if (pthread_mutex_init(&data->forks[i], NULL)) return (1); i++; } return (0); } int init_philos(t_data *data) { int i; i = 0; while (i < data->nb_philo) { data->philos[i].id = i + 1; data->philos[i].l_fork = i; data->philos[i].r_fork = (i + 1) % data->nb_philo; data->philos[i].last_meal = data->start_time; data->philos[i].m_eaten = 0; data->philos[i].data = data; if (pthread_mutex_init(&data->philos[i].meal_lock, NULL)) return (1); i++; } return (0); } int init_all(t_data *data) { int i; i = -1; if (init_philo_forks(data)) return (printf("Error : Failed to allocate memory\n"), 1); if (init_forks(data)) { free(data->philos); free(data->forks); return (printf("Error : Failed to initialize forks mutex\n"), 1); } if (init_philos(data)) { while (++i < data->nb_philo) pthread_mutex_destroy(&data->forks[i]); free(data->philos); free(data->forks); return (printf("Error : Failed to initialize philosophers\n"), 1); } return (0); } int init_philo_forks(t_data *data) { data->philos = malloc(sizeof(t_philo) * data->nb_philo); if (!data->philos) return (1); data->forks = malloc(sizeof(pthread_mutex_t) * data->nb_philo); if (!data->forks) return (free(data->philos), 1); return (0); }