#ifndef PHILO_H # define PHILO_H # include # include # include # include # include # include # include # define SUCCESS 1 # define FAILURE 0 # define ERROR_USAGE "Usage: ./philo number_of_philosophers time_to_die " \ "time_to_eat time_to_sleep [number_of_times_each_philosopher_must_eat]\n" # define ERROR_MUTEX "Can not create mutex" # define ERROR_MALLOC "Malloc Failure" # define ERROR_THREADS "Can not create threads" typedef struct s_rules { int n_philos; int time_to_die; int time_to_eat; int time_to_sleep; int n_must_eat; int death; int start_time; pthread_mutex_t *print_lock; pthread_mutex_t *death_lock; pthread_mutex_t *forks; struct s_philo *philos; } t_rules; typedef struct s_philo { int id; pthread_t *pid; pthread_mutex_t *l_fork; pthread_mutex_t *r_fork; int death; int last_meal; t_rules *rules; int n_eat; } t_philo; // memset, printf, malloc, free, write, // usleep, gettimeofday, pthread_create, // pthread_detach, pthread_join, pthread_mutex_init, // 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 create_mutexes(t_rules *rules); int create_threads(t_rules *rules); void print_status(t_philo *philo, char *status); void *philo_routine(void *philo); int join_threads(t_rules *rules); void print_rules(t_rules *rules); int check_alive(t_philo *philo); #endif