diff options
| -rw-r--r-- | philo/Makefile | 2 | ||||
| -rw-r--r-- | philo/include/philo.h | 3 | ||||
| -rw-r--r-- | philo/src/init.c | 71 | ||||
| -rw-r--r-- | philo/src/main.c | 57 |
4 files changed, 75 insertions, 58 deletions
diff --git a/philo/Makefile b/philo/Makefile index 0d55726..9cd7e26 100644 --- a/philo/Makefile +++ b/philo/Makefile @@ -9,7 +9,7 @@ CFLAGS = -Wall -Wextra -Werror HEADERS = -Iinclude VPATH := src -SRC := main.c ft_utils.c simulation.c philo_eat.c +SRC := main.c init.c ft_utils.c simulation.c philo_eat.c OBJ_DIR := _obj OBJ := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o)) diff --git a/philo/include/philo.h b/philo/include/philo.h index df1b451..07e4e96 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/28 13:07:28 by dkaiser ### ########.fr */ +/* Updated: 2025/01/28 13:16:12 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,6 +51,7 @@ typedef struct s_philo t_phdata *data; } t_philo; +int init(t_philo **philos, t_phdata *data); int run_simulation(int nbr_of_philos, t_philo *philos, t_phdata *data); int philo_die(t_philo *philo); 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(); +} diff --git a/philo/src/main.c b/philo/src/main.c index a43fe8d..ae0e54b 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/27 12:07:13 by dkaiser ### ########.fr */ +/* Updated: 2025/01/28 13:20:47 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,61 +38,6 @@ int load_data(t_phdata *data, int argc, char *argv[]) return (EXIT_SUCCESS); } -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(); -} - -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); -} - -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); -} - int main(int argc, char *argv[]) { t_phdata data; |
