diff --git a/philo_one/srcs/logic.c b/philo_one/srcs/logic.c index c170400..3058f56 100644 --- a/philo_one/srcs/logic.c +++ b/philo_one/srcs/logic.c @@ -70,7 +70,7 @@ int run_observer(t_all *all) while(1) { i = 0; - while(i <= all->number_of_philosophers) + while(i < all->number_of_philosophers) { if (all->smert != 42) { diff --git a/philo_one/srcs/prepare_simulation.c b/philo_one/srcs/prepare_simulation.c index 9a9886b..1bf6c13 100644 --- a/philo_one/srcs/prepare_simulation.c +++ b/philo_one/srcs/prepare_simulation.c @@ -5,7 +5,7 @@ int check_all_run(t_all *all) int i; i = 0; - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { if (all->data_philo->philors[i].worked) { @@ -22,7 +22,7 @@ void run_simulation(t_all *all) int i; i = 0; - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { if (!all->data_philo->philors[i].can_run_simulation) { @@ -38,17 +38,17 @@ void get_fork_for_philo(t_all *all) i = 0; - while(i <= all->number_of_philosophers) + while(i < all->number_of_philosophers) { if (i == 0) { - all->data_philo->philors[i].more_fork = all->number_of_philosophers; all->data_philo->philors[i].less_fork = 0; + all->data_philo->philors[i].more_fork = all->number_of_philosophers - 1; } else { - all->data_philo->philors[i].more_fork = i + 1; - all->data_philo->philors[i].less_fork = i; + all->data_philo->philors[i].less_fork = i - 1; + all->data_philo->philors[i].more_fork = i; } all->data_philo->philors[i].died = 0; all->data_philo->philors[i].nbr_philo = i; @@ -67,7 +67,7 @@ int prepare_resources(t_all *all) i = 0; all->data_philo = ft_calloc(sizeof(t_philo_data), 1); all->data_philo->mutex = (pthread_mutex_t *)ft_calloc(all->number_of_philosophers + 1, sizeof(pthread_mutex_t)); - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { pthread_mutex_init(&all->data_philo->mutex[i], NULL); i++; @@ -82,7 +82,7 @@ void run_all_phils(t_all *all) int i; i = 0; void *philo; - while(i <= all->number_of_philosophers) + while(i < all->number_of_philosophers) { philo = (void*)(&all->data_philo->philors[i]); if (pthread_create(&all->data_philo->philors[i].thread, NULL, (void*)run_trhead, philo) == -1) diff --git a/philo_one/srcs/utilc.c b/philo_one/srcs/utilc.c index ab94a2a..fc24656 100644 --- a/philo_one/srcs/utilc.c +++ b/philo_one/srcs/utilc.c @@ -38,7 +38,7 @@ void ft_exit(t_all *all) i = 0; all->smert = 42; ft_msleep(200); - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { pthread_mutex_destroy(&all->data_philo->philors[i].eat_mutex); pthread_mutex_destroy(&all->data_philo->mutex[i]); diff --git a/philo_two/Makefile b/philo_two/Makefile deleted file mode 100644 index b183fa6..0000000 --- a/philo_two/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -.PHONY: all clean fclean re - -SRCS = main.c utilc.c parser.c logic.c messages.c\ - prepare_simulation.c old_utilc.c time.c ft_itoa.c\ - ft_strjoin.c - - -SRC_DIR = ./srcs/ -OBJ_DIR = ./obj/ - -OBJS = $(SRCS:%.c=%.o) - -OBJS_FILES = $(addprefix $(OBJ_DIR), $(OBJS)) - -HEADER = philo_header.h - -vpath %.h includes -vpath %.o $(OBJ_DIR) -vpath %.c $(SRC_DIR) - -CC = gcc -RM = rm -f -CFLAGS = -g -Wall -Wextra -Werror -I ./includes/ - -NAME = philo_two - -all: $(OBJ_DIR) $(NAME) - -norme : - norminette $(addprefix $(SRC_DIR), $(SRCS)) - -$(OBJ_DIR): - mkdir -p obj - -$(NAME): $(OBJS_FILES) - $(CC) $(CFLAGS) -o $(NAME) $(OBJS_FILES) -lpthread - -clean: - $(RM) $(OBJS_FILES) - -$(OBJ_DIR)%.o: %.c $(HEADER) - $(CC) $(CFLAGS) -c $< -o $@ - -fclean: clean - $(RM) $(NAME) - -re: fclean $(NAME) diff --git a/philo_two/includes/philo_header.h b/philo_two/includes/philo_header.h deleted file mode 100644 index d280ce8..0000000 --- a/philo_two/includes/philo_header.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef PHILO_HEADER_H -# define PHILO_HEADER_H - -# define _SLEEP_STEP 50 -# include -# include -# include -# include -# include -# include -# include - -# define _SEM_NAME_FORKS "pSemForks" -# define _SEM_WRITE_LOCK "write" - -typedef struct s_philo_data t_philo_data; - -typedef struct s_all -{ - int number_of_philosophers; - time_t time_to_die; - time_t time_to_eat; - time_t time_to_sleep; - int number_of_times_each_philosopher_must_eat; - time_t start_time; - t_philo_data *data_philo; - sem_t *write; - int smert; - int opt; -} t_all; - - -typedef struct s_philo -{ - unsigned worked:1; - unsigned can_run_simulation:1; - pthread_t thread; - int count_eat; - time_t time_to_die; - int died; - int nbr_philo; - time_t last_eat; - time_t limit; - t_all *all_struct; - int is_eat; - sem_t *eat_sem; - char *name; -} t_philo; - -typedef struct s_philo_data -{ - sem_t *sems; - t_philo *philors; -} t_philo_data; - -void *ft_calloc(size_t num, size_t size); -t_all *structalloc_and_bzero(void); -int parse_and_check_values(char **argv, int quantity); -int ft_atoi(const char *str); -int check_f(char ch); -int runner(t_all *all); -int return_big(int a, int b); -int return_less(int a, int b); -time_t ft_get_time(void); -void *run_trhead(t_philo *philo); -int prepare_resources(t_all *all); -int check_all_run(t_all *all); -void run_simulation(t_all *all); -void run_all_phils(t_all *all); -void messages(t_all *all, t_philo *philo, char *str); -void cycle(t_philo *philo); -void ft_msleep(time_t interval_ms); -void my_usleep(long time); -void ft_exit(t_all *all); -char *ft_itoa(int n); -char *ft_strjoin(char const *s1, char const *s2); -sem_t *reopen_sem(const char *name, int value); -char *sem_set_name(char *str, int i); -size_t ft_strlcpy(char *dst, const char *src, size_t size); -size_t ft_strlcat(char *dst, const char *src, size_t size); -int ft_strlen(char *str); -void get_data_for_philo(t_all *all); -#endif diff --git a/philo_two/obj/ft_itoa.o b/philo_two/obj/ft_itoa.o deleted file mode 100644 index 74b3560..0000000 Binary files a/philo_two/obj/ft_itoa.o and /dev/null differ diff --git a/philo_two/obj/ft_strjoin.o b/philo_two/obj/ft_strjoin.o deleted file mode 100644 index 66270ab..0000000 Binary files a/philo_two/obj/ft_strjoin.o and /dev/null differ diff --git a/philo_two/obj/logic.o b/philo_two/obj/logic.o deleted file mode 100644 index fb1dfa2..0000000 Binary files a/philo_two/obj/logic.o and /dev/null differ diff --git a/philo_two/obj/main.o b/philo_two/obj/main.o deleted file mode 100644 index dfc0ba2..0000000 Binary files a/philo_two/obj/main.o and /dev/null differ diff --git a/philo_two/obj/messages.o b/philo_two/obj/messages.o deleted file mode 100644 index d829941..0000000 Binary files a/philo_two/obj/messages.o and /dev/null differ diff --git a/philo_two/obj/old_utilc.o b/philo_two/obj/old_utilc.o deleted file mode 100644 index dc3a617..0000000 Binary files a/philo_two/obj/old_utilc.o and /dev/null differ diff --git a/philo_two/obj/parser.o b/philo_two/obj/parser.o deleted file mode 100644 index afafe8d..0000000 Binary files a/philo_two/obj/parser.o and /dev/null differ diff --git a/philo_two/obj/prepare_simulation.o b/philo_two/obj/prepare_simulation.o deleted file mode 100644 index 7343fa7..0000000 Binary files a/philo_two/obj/prepare_simulation.o and /dev/null differ diff --git a/philo_two/obj/time.o b/philo_two/obj/time.o deleted file mode 100644 index 294aaf7..0000000 Binary files a/philo_two/obj/time.o and /dev/null differ diff --git a/philo_two/obj/utilc.o b/philo_two/obj/utilc.o deleted file mode 100644 index b15b86f..0000000 Binary files a/philo_two/obj/utilc.o and /dev/null differ diff --git a/philo_two/philo_two b/philo_two/philo_two deleted file mode 100755 index 97f5793..0000000 Binary files a/philo_two/philo_two and /dev/null differ diff --git a/philo_two/srcs/ft_itoa.c b/philo_two/srcs/ft_itoa.c deleted file mode 100644 index d2161e4..0000000 --- a/philo_two/srcs/ft_itoa.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "../includes/philo_header.h" - -static int nbleng(unsigned int n) -{ - unsigned int i; - - i = 0; - while (n >= 10) - { - n /= 10; - i++; - } - return (i + 1); -} - -char *ft_itoa(int n) -{ - char *dst; - unsigned int leng; - unsigned int nbr; - unsigned int i; - - nbr = (n < 0 ? -n : n); - leng = nbleng(nbr); - i = 0; - if (!(dst = (char *)malloc(sizeof(char) * leng + 1 + (n < 0 ? 1 : 0)))) - return (NULL); - if (n < 0) - { - dst[i] = '-'; - leng++; - } - i = leng - 1; - while (nbr >= 10) - { - dst[i] = nbr % 10 + '0'; - nbr /= 10; - i--; - } - dst[i] = nbr % 10 + '0'; - dst[leng] = '\0'; - return (dst); -} diff --git a/philo_two/srcs/ft_strjoin.c b/philo_two/srcs/ft_strjoin.c deleted file mode 100644 index b1208f0..0000000 --- a/philo_two/srcs/ft_strjoin.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "../includes/philo_header.h" - -char *ft_strjoin(char const *s1, char const *s2) -{ - int len1; - int len2; - char *new; - - if (s1 && s2) - { - len1 = ft_strlen((char*)s1); - len2 = ft_strlen((char*)s2); - new = malloc(sizeof(char *) * len1 + len2 + 1); - if (new) - { - ft_strlcpy(new, s1, len1 + 1); - ft_strlcat(new, s2, len1 + len2 + 1); - return (void *)(new); - } - } - return (0); -} diff --git a/philo_two/srcs/logic.c b/philo_two/srcs/logic.c deleted file mode 100644 index 2c060b5..0000000 --- a/philo_two/srcs/logic.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "../includes/philo_header.h" - -void *run_trhead(t_philo *philo) -{ - philo->worked = 1; - while(1) - { - if (philo->can_run_simulation) - break; - } - if (philo->can_run_simulation) - { - while( philo->all_struct->smert != 42) - { - if (philo->all_struct->opt) - { - if (philo->count_eat == philo->all_struct->number_of_times_each_philosopher_must_eat) - philo->all_struct->smert = 42; - } - cycle(philo); - } - } - return(NULL); -} - -void take_forks(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - - - - messages(philo->all_struct, philo, "thinking"); - sem_wait(all->data_philo->sems); - messages(philo->all_struct, philo, "has taken a fork"); - sem_wait(all->data_philo->sems); - messages(philo->all_struct, philo, "has taken a fork"); -} -void eating(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - - - - sem_wait(philo->eat_sem); - messages(philo->all_struct, philo, "eating"); - philo->last_eat = ft_get_time() - philo->all_struct->start_time; - ft_msleep(philo->all_struct->time_to_eat); - philo->count_eat++; - sem_post(philo->eat_sem); -} -void sleeping(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - - - - messages(philo->all_struct, philo, "sleeping"); - sem_post(all->data_philo->sems); - sem_post(all->data_philo->sems); - ft_msleep(philo->all_struct->time_to_sleep); -} - -void cycle(t_philo *philo) -{ - take_forks(philo); - eating(philo); - sleeping(philo); -} - -int run_observer(t_all *all) -{ - int i; - i = 0; - time_t time_eat; - while(1) - { - i = 0; - while(i <= all->number_of_philosophers) - { - sem_wait(all->data_philo->philors[i].eat_sem); - if (all->smert != 42) - { - time_eat = (ft_get_time() - all->start_time) - all->data_philo->philors[i].last_eat; - if (time_eat > all->time_to_die) - { - printf("%ld %d died\n", ft_get_time() - all->start_time, i + 1); - return(2); - } - } - else - return(2); - sem_post(all->data_philo->philors[i].eat_sem); - i++; - } - } - return (0); -} - -int runner(t_all *all) -{ - prepare_resources(all); - run_all_phils(all); - if (check_all_run(all)) - { - all->start_time = ft_get_time(); - run_simulation(all); - } - if (!run_observer(all)) - return(0); - return(1); -} diff --git a/philo_two/srcs/main.c b/philo_two/srcs/main.c deleted file mode 100644 index 01b6bd3..0000000 --- a/philo_two/srcs/main.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "../includes/philo_header.h" - -int main(int argc, char **argv) -{ - if (parse_and_check_values(argv, argc) == 2) - return(0); - else - { - return (1); - } - return(0); -} diff --git a/philo_two/srcs/messages.c b/philo_two/srcs/messages.c deleted file mode 100644 index 35dd993..0000000 --- a/philo_two/srcs/messages.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "../includes/philo_header.h" - -void messages(t_all *all, t_philo *philo, char *str) -{ - time_t timestemp = ft_get_time() - all->start_time; - if (philo->all_struct->smert != 42) - { - sem_wait(all->write); - printf("%ld %*s%d %s\n", timestemp, philo->nbr_philo * 30, "", philo->nbr_philo, str); - sem_post(all->write); - } - -} diff --git a/philo_two/srcs/old_utilc.c b/philo_two/srcs/old_utilc.c deleted file mode 100644 index 3d505cb..0000000 --- a/philo_two/srcs/old_utilc.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "../includes/philo_header.h" - -int check_f(char ch) -{ - if (ch == '\t' || ch == '\n' || ch == ' ' || \ - ch == '\v' || ch == '\f' || ch == '\r') - return (1); - else - return (0); -} - -int ft_atoi(const char *str) -{ - int i; - unsigned long int result; - int operator; - - i = 0; - operator = 1; - result = 0; - while (check_f(str[i])) - i++; - if (str[i] == '-' || str[i] == '+') - { - if (str[i] == '-') - operator *= -1; - i++; - } - while (str[i] >= '0' && str[i] <= '9') - { - if (result > 922337203685477580 && operator == -1) - return (0); - else if (result > 922337203685477580 && operator == 1) - return (-1); - result = result * 10 + str[i] - '0'; - i++; - } - return (result * operator); -} - -void *ft_calloc(size_t num, size_t size) -{ - void *addr; - unsigned int nbytes; - - nbytes = num * size; - addr = malloc(nbytes); - if (!size || !num || (size == 0 && num == 0)) - return ((void *)addr); - if (!addr) - return (NULL); - else - { - memset(addr, '\0', nbytes); - } - return ((void *)addr); -} diff --git a/philo_two/srcs/parser.c b/philo_two/srcs/parser.c deleted file mode 100644 index 55f6723..0000000 --- a/philo_two/srcs/parser.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "../includes/philo_header.h" - -int check_param(t_all *all, int optional) -{ - if (optional) - { - if (all->number_of_philosophers <= 0) - return(1); - if (all->time_to_die <= 0) - return(1); - if (all->time_to_eat <= 0) - return(1); - if (all->time_to_sleep <= 0) - return(1); - if (all->number_of_times_each_philosopher_must_eat <= 0) - return(1); - } - else - { - if (all->number_of_philosophers <= 0) - return(1); - if (all->time_to_die <= 0) - return(1); - if (all->time_to_eat <= 0) - return(1); - if (all->time_to_sleep <= 0) - return(1); - } - return (0); -} - -int parse_param(t_all *all, int optional, char **argv) -{ - all->smert = 0; - if (optional) - { - all->number_of_philosophers = ft_atoi(argv[1]); - all->time_to_die = ft_atoi(argv[2]); - all->time_to_eat = ft_atoi(argv[3]); - all->time_to_sleep = ft_atoi(argv[4]); - all->number_of_times_each_philosopher_must_eat = ft_atoi(argv[5]); - all->opt = 1; - return (check_param(all, 1)); - } - else - { - all->number_of_philosophers = ft_atoi(argv[1]); - all->time_to_die = ft_atoi(argv[2]); - all->time_to_eat = ft_atoi(argv[3]); - all->time_to_sleep = ft_atoi(argv[4]); - all->number_of_times_each_philosopher_must_eat = 0; - all->opt = 0; - return (check_param(all, 0)); - } -} - -int parse_and_check_values(char **argv, int quantity) -{ - t_all *all; - int bool; - - if (quantity == 5) - bool = 0; - if (quantity == 6) - bool = 1; - all = structalloc_and_bzero(); - if (quantity == 5 || quantity == 6) - { - if (!parse_param(all, bool, argv)) - { - if (runner(all) == 2) - return (2); - return(1); - } - else - { - printf("bad arg\n"); - return (0); - } - } - else - { - printf("error please use argument 5 (optional) or 4 (standart)\n"); - free(all); - return(0); - } -} diff --git a/philo_two/srcs/prepare_simulation.c b/philo_two/srcs/prepare_simulation.c index 43d0bf9..9ce130a 100644 --- a/philo_two/srcs/prepare_simulation.c +++ b/philo_two/srcs/prepare_simulation.c @@ -5,14 +5,14 @@ int check_all_run(t_all *all) int i; i = 0; - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { if (all->data_philo->philors[i].worked) { i++; } } - printf("все запустились !\n"); + // printf("все запустились !\n"); return (1); } @@ -22,7 +22,7 @@ void run_simulation(t_all *all) int i; i = 0; - while (i <= all->number_of_philosophers) + while (i < all->number_of_philosophers) { if (!all->data_philo->philors[i].can_run_simulation) { @@ -38,7 +38,7 @@ void get_data_for_philo(t_all *all) i = 0; - while(i <= all->number_of_philosophers) + while(i < all->number_of_philosophers) { all->data_philo->philors[i].name = sem_set_name("philo", i); all->data_philo->philors[i].eat_sem = reopen_sem(all->data_philo->philors[i].name, 1); @@ -74,7 +74,7 @@ void run_all_phils(t_all *all) int i; i = 0; void *philo; - while(i <= all->number_of_philosophers) + while(i < all->number_of_philosophers) { philo = (void*)(&all->data_philo->philors[i]); if (pthread_create(&all->data_philo->philors[i].thread, NULL, (void*)run_trhead, philo) == -1) diff --git a/philo_two/srcs/time.c b/philo_two/srcs/time.c deleted file mode 100644 index 9bb4559..0000000 --- a/philo_two/srcs/time.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "../includes/philo_header.h" - -time_t ft_get_time(void) -{ - time_t return_value; - struct timeval current_time; - gettimeofday(¤t_time, NULL); - return_value = (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000); - return (return_value); -} - -void ft_msleep(time_t interval_ms) -{ - time_t end_ms = ft_get_time() + interval_ms; - time_t now_ms = ft_get_time(); - - while (now_ms < end_ms) - { - usleep(_SLEEP_STEP); - now_ms = ft_get_time(); - } -} - -long get_time(void) -{ - struct timeval time; - gettimeofday(&time, NULL); - return ((long)(time.tv_sec * 1000 + time.tv_usec / 1000)); -} - -void my_usleep(long time) -{ - long t; - t = get_time(); - while (get_time() - t < time) - usleep(1); -} diff --git a/philo_two/srcs/utilc.c b/philo_two/srcs/utilc.c deleted file mode 100644 index 0b25c8e..0000000 --- a/philo_two/srcs/utilc.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "../includes/philo_header.h" - -t_all *structalloc_and_bzero(void) -{ - t_all *all; - - all = ft_calloc(sizeof(t_all), 1); - all->number_of_philosophers = -1; - all->time_to_die = -1; - all->time_to_eat = -1; - all->time_to_sleep = -1; - all->number_of_times_each_philosopher_must_eat = -1; - return(all); -} - -size_t ft_strlcpy(char *dst, const char *src, size_t size) -{ - unsigned int i; - unsigned int count; - - count = 0; - if (!dst && !src) - return (0); - while (src[count] != '\0') - { - ++count; - } - i = 0; - if (size > 0) - { - while (src[i] != '\0' && i < (size - 1) && src[i]) - { - dst[i] = src[i]; - ++i; - } - dst[i] = '\0'; - } - return (count); -} - -size_t ft_strlcat(char *dst, const char *src, size_t size) -{ - unsigned int i; - unsigned int len; - - len = 0; - if (!dst && !src) - return (0); - len = ft_strlen(dst); - i = 0; - if (size < len) - return (ft_strlen((char *)src) + size); - if (size) - { - while (src[i] && len + 1 < size) - dst[len++] = src[i++]; - dst[len] = '\0'; - } - while (src[i]) - { - i++; - len++; - } - return (len); -} - - -int ft_strlen(char *str) -{ - int i; - - i = 0; - while (str[i]) - i++; - return(i); -} - -int return_big(int a, int b) -{ - if (a > b) - { - return (a); - } - return (b); -} - -int return_less(int a, int b) -{ - if (a < b) - { - return (a); - } - return (b); -} - -void ft_exit(t_all *all) -{ - int i; - - i = 0; - all->smert = 42; - ft_msleep(200); - while (i <= all->number_of_philosophers) - { - // pthread_mutex_destroy(&all->data_philo->philors[i].eat_mutex); - //pthread_mutex_destroy(&all->data_philo->mutex[i]); // TODO fix this - i++; - } - i = 0; - while (i < all->number_of_philosophers) - { - free(&all->data_philo->philors[i]); - i++; - } -} - -char *sem_set_name(char *str, int i) -{ - char *temp_nbr; - char *returnstr; - - temp_nbr = ft_itoa(i); - returnstr = ft_strjoin(str, temp_nbr); - free(temp_nbr); - return(returnstr); -} - -sem_t *reopen_sem(const char *name, int value) -{ - sem_unlink(name); - return (sem_open(name, O_RDWR | O_CREAT, S_IRWXU, value)); -}