diff --git a/philo/Makefile b/philo/Makefile index e8a3fd4..25f7594 100644 --- a/philo/Makefile +++ b/philo/Makefile @@ -16,7 +16,7 @@ SRC_PATH = src INC_PATH = inc OBJ_PATH = obj -VPATH = src:src/utils +VPATH = src:src/utils:src/routines:src/init:src/cleanup SOURCES = get_time.c ph_atoi.c print_rules.c print_status.c \ philo_routine.c philo_sleep.c set_death.c \ synchronize_philos.c take_forks.c think_time.c \ @@ -34,8 +34,7 @@ CC = cc RM = rm -rf INCLUDES = -I./$(INC_PATH) -CFLAGS = -Wall -Wextra -Werror -MMD -g -UNAME_S := $(shell uname -s) +override CFLAGS := -Wall -Wextra -Werror -MMD $(CFLAGS) ifeq ($(UNAME_S),Linux) LDLIBS := -pthread endif diff --git a/philo/inc/philo.h b/philo/inc/philo.h index 938c24c..89dfa45 100644 --- a/philo/inc/philo.h +++ b/philo/inc/philo.h @@ -67,33 +67,35 @@ typedef struct s_philo // pthread_mutex_destroy, pthread_mutex_lock, // pthread_mutex_unlock -int ph_atoi(const char *nptr, int *res); -int get_time(void); -void free_philos(t_rules *rules); -int destroy_mutexes(t_rules *rules); -int create_philos(t_rules *rules); -int parse_arguments(int argc, char *argv[], t_rules *rules); +int check_philos(t_rules *rules); int create_mutexes(t_rules *rules); +int create_philo_mutexes(t_philo *philo); +int create_philos(t_rules *rules); int create_threads(t_rules *rules); -void print_status(t_philo *philo, char *status); -void *philo_routine(void *philo); +int destroy_mutexes(t_rules *rules); +int ft_min(int a, int b); +void free_philos(t_rules *rules); +int get_finished(t_rules *rules); +int get_death(t_philo *philo); +int get_time(void); int join_threads(t_rules *rules); -void print_rules(t_rules *rules); -int check_death(t_philo *philo); +void *monitor_routine(void *arg); +void *one_philo(t_philo *philo); +int parse_arguments(int argc, char *argv[], t_rules *rules); +int ph_atoi(const char *nptr, int *res); void philo_die(t_philo *philo); int philo_eat(t_philo *philo); -void *monitor_routine(void *arg); -int check_philos(t_rules *rules); -int ft_min(int a, int b); -void set_finished(t_rules *rules); -int get_finished(t_rules *rules); -void synchronize_philos(t_philo *philo); +void *philo_routine(void *philo); int philo_sleep(t_philo *philo, int time); -void unlock_forks(t_philo *philo); +void print_rules(t_rules *rules); +void print_status(t_philo *philo, char *status); +void print_usage(void); +void set_finished(t_rules *rules); +void set_death(t_philo *philo); +void synchronize_philos(t_philo *philo); void take_forks(t_philo *philo); int think_time(t_rules *rules); -int create_philo_mutexes(t_philo *philo); -void one_philo(t_philo *philo); -void print_usage(void); +void unlock_forks(t_philo *philo); + #endif diff --git a/philo/src/destroy_mutexes.c b/philo/src/cleanup/destroy_mutexes.c similarity index 100% rename from philo/src/destroy_mutexes.c rename to philo/src/cleanup/destroy_mutexes.c diff --git a/philo/src/free_philos.c b/philo/src/cleanup/free_philos.c similarity index 100% rename from philo/src/free_philos.c rename to philo/src/cleanup/free_philos.c diff --git a/philo/src/join_threads.c b/philo/src/cleanup/join_threads.c similarity index 100% rename from philo/src/join_threads.c rename to philo/src/cleanup/join_threads.c diff --git a/philo/src/create_mutexes.c b/philo/src/init/create_mutexes.c similarity index 100% rename from philo/src/create_mutexes.c rename to philo/src/init/create_mutexes.c diff --git a/philo/src/create_philo_mutexes.c b/philo/src/init/create_philo_mutexes.c similarity index 100% rename from philo/src/create_philo_mutexes.c rename to philo/src/init/create_philo_mutexes.c diff --git a/philo/src/create_philos.c b/philo/src/init/create_philos.c similarity index 100% rename from philo/src/create_philos.c rename to philo/src/init/create_philos.c diff --git a/philo/src/create_threads.c b/philo/src/init/create_threads.c similarity index 100% rename from philo/src/create_threads.c rename to philo/src/init/create_threads.c diff --git a/philo/src/parse_arguments.c b/philo/src/init/parse_arguments.c similarity index 100% rename from philo/src/parse_arguments.c rename to philo/src/init/parse_arguments.c diff --git a/philo/src/check_philos.c b/philo/src/routines/check_philos.c similarity index 100% rename from philo/src/check_philos.c rename to philo/src/routines/check_philos.c diff --git a/philo/src/get_death.c b/philo/src/routines/get_death.c similarity index 100% rename from philo/src/get_death.c rename to philo/src/routines/get_death.c diff --git a/philo/src/get_finished.c b/philo/src/routines/get_finished.c similarity index 100% rename from philo/src/get_finished.c rename to philo/src/routines/get_finished.c diff --git a/philo/src/monitor_routine.c b/philo/src/routines/monitor_routine.c similarity index 100% rename from philo/src/monitor_routine.c rename to philo/src/routines/monitor_routine.c diff --git a/philo/src/one_philo.c b/philo/src/routines/one_philo.c similarity index 95% rename from philo/src/one_philo.c rename to philo/src/routines/one_philo.c index 3d7fab2..2fb6a58 100644 --- a/philo/src/one_philo.c +++ b/philo/src/routines/one_philo.c @@ -12,10 +12,11 @@ #include "philo.h" -void one_philo(t_philo *philo) +void *one_philo(t_philo *philo) { pthread_mutex_lock(philo->l_fork); print_status(philo, "has taken a fork"); pthread_mutex_unlock(philo->l_fork); philo_sleep(philo, philo->rules->time_to_die); + return (NULL); } diff --git a/philo/src/philo_die.c b/philo/src/routines/philo_die.c similarity index 90% rename from philo/src/philo_die.c rename to philo/src/routines/philo_die.c index e687bf2..8405ae0 100644 --- a/philo/src/philo_die.c +++ b/philo/src/routines/philo_die.c @@ -15,8 +15,6 @@ void philo_die(t_philo *philo) { print_status(philo, "died"); - pthread_mutex_lock(philo->death_lock); - philo->death = 1; - pthread_mutex_unlock(philo->death_lock); + set_death(philo); set_finished(philo->rules); } diff --git a/philo/src/philo_eat.c b/philo/src/routines/philo_eat.c similarity index 100% rename from philo/src/philo_eat.c rename to philo/src/routines/philo_eat.c diff --git a/philo/src/philo_routine.c b/philo/src/routines/philo_routine.c similarity index 86% rename from philo/src/philo_routine.c rename to philo/src/routines/philo_routine.c index faeb28f..30b07d2 100644 --- a/philo/src/philo_routine.c +++ b/philo/src/routines/philo_routine.c @@ -19,19 +19,16 @@ void *philo_routine(void *arg) philo = (t_philo *)arg; synchronize_philos(philo); if (philo->rules->n_philos == 1) - { - one_philo(philo); - return (NULL); - } - while (!philo->death && !get_finished(philo->rules)) + return (one_philo(philo)); + while (!get_death(philo) && !get_finished(philo->rules)) { if (!philo_eat(philo)) break ; - if (!philo->death && !get_finished(philo->rules)) + if (!get_death(philo) && !get_finished(philo->rules)) print_status(philo, "is sleeping"); if (!philo_sleep(philo, philo->rules->time_to_sleep)) break ; - if (!philo->death && !get_finished(philo->rules)) + if (!get_death(philo) && !get_finished(philo->rules)) print_status(philo, "is thinking"); if (!philo_sleep(philo, think_time(philo->rules))) break ; diff --git a/philo/src/set_death.c b/philo/src/routines/set_death.c similarity index 100% rename from philo/src/set_death.c rename to philo/src/routines/set_death.c diff --git a/philo/src/set_finished.c b/philo/src/routines/set_finished.c similarity index 100% rename from philo/src/set_finished.c rename to philo/src/routines/set_finished.c diff --git a/philo/src/synchronize_philos.c b/philo/src/routines/synchronize_philos.c similarity index 100% rename from philo/src/synchronize_philos.c rename to philo/src/routines/synchronize_philos.c diff --git a/philo/src/take_forks.c b/philo/src/routines/take_forks.c similarity index 100% rename from philo/src/take_forks.c rename to philo/src/routines/take_forks.c diff --git a/philo/src/unlock_forks.c b/philo/src/routines/unlock_forks.c similarity index 100% rename from philo/src/unlock_forks.c rename to philo/src/routines/unlock_forks.c diff --git a/philo/src/ft_min.c b/philo/src/utils/ft_min.c similarity index 100% rename from philo/src/ft_min.c rename to philo/src/utils/ft_min.c diff --git a/philo/src/philo_sleep.c b/philo/src/utils/philo_sleep.c similarity index 100% rename from philo/src/philo_sleep.c rename to philo/src/utils/philo_sleep.c diff --git a/philo/src/print_usage.c b/philo/src/utils/print_usage.c similarity index 100% rename from philo/src/print_usage.c rename to philo/src/utils/print_usage.c diff --git a/philo/src/think_time.c b/philo/src/utils/think_time.c similarity index 100% rename from philo/src/think_time.c rename to philo/src/utils/think_time.c