diff options
| author | Dominik Kaiser | 2025-01-28 13:21:34 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2025-01-28 13:21:34 +0100 |
| commit | ec7a989cf45440e41d43e7fa2d2ce660fa499933 (patch) | |
| tree | d96f76a0bd031db581ebd8731f8f22b4eb291862 /philo/src/init.c | |
| parent | 8ba41264ba8a6a37680df5eb94459dd4b8e1276c (diff) | |
| download | Philosophers-ec7a989cf45440e41d43e7fa2d2ce660fa499933.tar.gz Philosophers-ec7a989cf45440e41d43e7fa2d2ce660fa499933.zip | |
Outsource init func to seperate file
Diffstat (limited to 'philo/src/init.c')
| -rw-r--r-- | philo/src/init.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/philo/src/init.c b/philo/src/init.c new file mode 100644 index 0000000..6f91f7e --- /dev/null +++ b/philo/src/init.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* init.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/28 13:12:57 by dkaiser #+# #+# */ +/* Updated: 2025/01/28 13:15:30 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "philo.h" + +static void init_philo(t_philo *philo, t_phdata *data, int id); +static int init_philos(t_philo **philos, t_phdata *data); + +int init(t_philo **philos, t_phdata *data) +{ + int result; + + *philos = (t_philo *)malloc(sizeof(t_philo) * data->nbr_of_philos); + if (*philos == NULL) + return (ft_err(ERR_MALLOC)); + data->forks = (t_fork *)malloc(sizeof(t_fork) * data->nbr_of_philos); + if (data->forks == NULL) + { + free(*philos); + return (ft_err(ERR_MALLOC)); + } + result = pthread_mutex_init(&(data->pme_mutex), NULL); + if (result != 0) + { + free(*philos); + free(data->forks); + return (result); + } + result = init_philos(philos, data); + return (result); +} + +static int init_philos(t_philo **philos, t_phdata *data) +{ + int i; + int result; + + i = 0; + while (i < data->nbr_of_philos) + { + init_philo(&(*philos)[i], data, i + 1); + data->forks[i].owner = 0; + result = pthread_mutex_init(&(data->forks[i].mutex), NULL); + if (result != 0) + { + free(*philos); + free(data->forks); + return (result); + } + i++; + } + return (EXIT_SUCCESS); +} + +static void init_philo(t_philo *philo, t_phdata *data, int id) +{ + philo->id = id; + philo->is_alive = 1; + philo->times_must_eat = data->times_must_eat; + philo->data = data; + philo->last_time_eaten = ft_cur_time_in_ms(); +} |
