From 5f1937beeca592ce83604296588243264fd6cc18 Mon Sep 17 00:00:00 2001 From: Matthos Denys Date: Tue, 18 May 2021 21:36:56 +0300 Subject: [PATCH] update --- README.md | 2 - philo_one/.vscode/launch.json | 16 +++ philo_one/Makefile | 14 ++- philo_one/includes/philo_header.h | 48 ++++----- philo_one/obj/checker.o | Bin 0 -> 6720 bytes philo_one/obj/logic.o | Bin 0 -> 7200 bytes philo_one/obj/logic_cycle.o | Bin 0 -> 6680 bytes philo_one/obj/main.o | Bin 0 -> 2356 bytes philo_one/obj/messages.o | Bin 0 -> 5284 bytes philo_one/obj/old_utilc.o | Bin 0 -> 4348 bytes philo_one/obj/parser.o | Bin 0 -> 5184 bytes philo_one/obj/prepare_simulation.o | Bin 0 -> 7752 bytes philo_one/obj/time.o | Bin 0 -> 4248 bytes philo_one/obj/utilc.o | Bin 0 -> 5560 bytes philo_one/philo_one | Bin 0 -> 18296 bytes philo_one/srcs/checker.c | 75 ++++++++++++++ philo_one/srcs/logic.c | 151 +++++++++++++--------------- philo_one/srcs/logic_cycle.c | 56 +++++++++++ philo_one/srcs/main.c | 18 +++- philo_one/srcs/messages.c | 18 +++- philo_one/srcs/old_utilc.c | 16 ++- philo_one/srcs/parser.c | 95 +++++------------ philo_one/srcs/prepare_simulation.c | 90 +++++++++-------- philo_one/srcs/time.c | 25 ++++- philo_one/srcs/utilc.c | 60 +++++------ philo_two/Makefile | 47 +++++++++ philo_two/includes/philo_header.h | 83 +++++++++++++++ philo_two/obj/ft_itoa.o | Bin 0 -> 3236 bytes philo_two/obj/ft_strjoin.o | Bin 0 -> 2784 bytes philo_two/obj/logic.o | Bin 0 -> 7988 bytes philo_two/obj/main.o | Bin 0 -> 2356 bytes philo_two/obj/messages.o | Bin 0 -> 5092 bytes philo_two/obj/old_utilc.o | Bin 0 -> 4344 bytes philo_two/obj/parser.o | Bin 0 -> 6840 bytes philo_two/obj/prepare_simulation.o | Bin 0 -> 7520 bytes philo_two/obj/time.o | Bin 0 -> 4244 bytes philo_two/obj/utilc.o | Bin 0 -> 8344 bytes philo_two/philo_two | Bin 0 -> 18736 bytes philo_two/srcs/ft_itoa.c | 43 ++++++++ philo_two/srcs/ft_strjoin.c | 22 ++++ philo_two/srcs/logic.c | 94 +++++++++++++++++ philo_two/srcs/main.c | 12 +++ philo_two/srcs/messages.c | 14 +++ philo_two/srcs/old_utilc.c | 57 +++++++++++ philo_two/srcs/parser.c | 87 ++++++++++++++++ philo_two/srcs/prepare_simulation.c | 82 +++++++++++++++ philo_two/srcs/time.c | 42 ++++++++ philo_two/srcs/utilc.c | 93 +++++++++++++++++ workspace.code-workspace | 10 -- 49 files changed, 1097 insertions(+), 273 deletions(-) delete mode 100644 README.md create mode 100644 philo_one/.vscode/launch.json create mode 100644 philo_one/obj/checker.o create mode 100644 philo_one/obj/logic.o create mode 100644 philo_one/obj/logic_cycle.o create mode 100644 philo_one/obj/main.o create mode 100644 philo_one/obj/messages.o create mode 100644 philo_one/obj/old_utilc.o create mode 100644 philo_one/obj/parser.o create mode 100644 philo_one/obj/prepare_simulation.o create mode 100644 philo_one/obj/time.o create mode 100644 philo_one/obj/utilc.o create mode 100755 philo_one/philo_one create mode 100644 philo_one/srcs/checker.c create mode 100644 philo_one/srcs/logic_cycle.c create mode 100644 philo_two/Makefile create mode 100644 philo_two/includes/philo_header.h create mode 100644 philo_two/obj/ft_itoa.o create mode 100644 philo_two/obj/ft_strjoin.o create mode 100644 philo_two/obj/logic.o create mode 100644 philo_two/obj/main.o create mode 100644 philo_two/obj/messages.o create mode 100644 philo_two/obj/old_utilc.o create mode 100644 philo_two/obj/parser.o create mode 100644 philo_two/obj/prepare_simulation.o create mode 100644 philo_two/obj/time.o create mode 100644 philo_two/obj/utilc.o create mode 100755 philo_two/philo_two create mode 100644 philo_two/srcs/ft_itoa.c create mode 100644 philo_two/srcs/ft_strjoin.c create mode 100644 philo_two/srcs/logic.c create mode 100644 philo_two/srcs/main.c create mode 100644 philo_two/srcs/messages.c create mode 100644 philo_two/srcs/old_utilc.c create mode 100644 philo_two/srcs/parser.c create mode 100644 philo_two/srcs/prepare_simulation.c create mode 100644 philo_two/srcs/time.c create mode 100644 philo_two/srcs/utilc.c delete mode 100644 workspace.code-workspace diff --git a/README.md b/README.md deleted file mode 100644 index 2a91f24..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# philosophers - diff --git a/philo_one/.vscode/launch.json b/philo_one/.vscode/launch.json new file mode 100644 index 0000000..8511bff --- /dev/null +++ b/philo_one/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug", + "program": "${workspaceFolder}/philo_one", + "args": ["5", "800", "200", "200", "2"], + "cwd": "${workspaceFolder}" + } + ] +} diff --git a/philo_one/Makefile b/philo_one/Makefile index c94a74a..2880d89 100644 --- a/philo_one/Makefile +++ b/philo_one/Makefile @@ -1,6 +1,18 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: mdenys +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2021/05/18 21:18:31 by mdenys #+# #+# # +# Updated: 2021/05/18 21:18:31 by mdenys ### ########.fr # +# # +# **************************************************************************** # + .PHONY: all clean fclean re -SRCS = main.c utilc.c parser.c logic.c messages.c prepare_simulation.c old_utilc.c time.c +SRCS = main.c utilc.c parser.c logic.c logic_cycle.c messages.c prepare_simulation.c old_utilc.c time.c checker.c SRC_DIR = ./srcs/ diff --git a/philo_one/includes/philo_header.h b/philo_one/includes/philo_header.h index a57f609..c7064a2 100644 --- a/philo_one/includes/philo_header.h +++ b/philo_one/includes/philo_header.h @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* philo_header.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:22 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:22:30 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #ifndef PHILO_HEADER_H # define PHILO_HEADER_H @@ -9,37 +21,26 @@ # include # include +typedef struct s_philo_data t_philo_data; - -#define ANSI_COLOR_RED "\x1b[31m" -#define ANSI_COLOR_GREEN "\x1b[32m" -#define ANSI_COLOR_YELLOW "\x1b[33m" -#define ANSI_COLOR_BLUE "\x1b[34m" -#define ANSI_COLOR_MAGENTA "\x1b[35m" -#define ANSI_COLOR_CYAN "\x1b[36m" -#define ANSI_COLOR_RESET "\x1b[0m" - -typedef struct s_philo_data t_philo_data; - -typedef struct s_all +typedef struct s_all { - int number_of_philosophers; + int nbr_phls; time_t time_to_die; time_t time_to_eat; time_t time_to_sleep; - int number_of_times_each_philosopher_must_eat; + int iteration_eat; time_t start_time; - t_philo_data *data_philo; + t_philo_data *data; pthread_mutex_t write; int smert; int opt; } t_all; - -typedef struct s_philo +typedef struct s_philo { - unsigned worked:1; - unsigned can_run_simulation:1; + unsigned worked :1; + unsigned can_run_simulation :1; int more_fork; int less_fork; pthread_t thread; @@ -52,9 +53,9 @@ typedef struct s_philo t_all *all_struct; int is_eat; pthread_mutex_t eat_mutex; -} t_philo; +} t_philo; -typedef struct s_philo_data +typedef struct s_philo_data { pthread_mutex_t *mutex; t_philo *philors; @@ -69,7 +70,7 @@ 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); +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); @@ -78,5 +79,6 @@ 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); +int ft_exit(t_all *all); +int check_param(t_all *all, int optional); #endif diff --git a/philo_one/obj/checker.o b/philo_one/obj/checker.o new file mode 100644 index 0000000000000000000000000000000000000000..a8088798992d0633cff2f2aa7537c83cd206bfec GIT binary patch literal 6720 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 NZjZo^x0WTu{{e5A6$1bO literal 0 HcmV?d00001 diff --git a/philo_one/obj/logic.o b/philo_one/obj/logic.o new file mode 100644 index 0000000000000000000000000000000000000000..b7839a690b944317b5d694be1222977d83e348ee GIT binary patch literal 7200 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 literal 0 HcmV?d00001 diff --git a/philo_one/obj/messages.o b/philo_one/obj/messages.o new file mode 100644 index 0000000000000000000000000000000000000000..8686e86510596494702958c32cae70d02b69dd69 GIT binary patch literal 5284 zcmb_gYit}>6~43U8IQB}dYzEeA;#VWCry)h*N*crsngm?95zluo-PT24&&Xicaz zUhg_liqtEgdmi_k@4oMz@yj>=@j)$PQjnnn)quuiR8bJhQqT+;?@(5Sy@u~n42rJ< zlMywN5k=EnW6bqrPd_|xR2Vg_63@p8 ziT1UM5CjWUs=!Mb!-Y`|pu9!Xc6_$~;LcgE9|-BP2;5YKhvo`MA5R}1wvAIX-b%cO zX~9um^B8+i6+)Ta7B6FtSmaWT*CY05sldHn=K)P&{RGf$@p5{SLssJ*pv^;}GePCA z^&X#7SK;aTeAduRJ!d#@s>VAg@OlNn-##RsHGDitA=P-_5P0nZZ&ia3%IwbL%j?N% zyh~MhgC7#lJ(Iufd|wrKSuqOpu6W-08#N1BzA$W7k8j%oZ(>m~zt{YWb;tQu;JMX! z!vgQP*x;LY#Y`(NUbi`4e4K?T3-pMr@oG z52gD4P7Ay~ubE8%2XKWJ{DSR!#X=QiC{9!eD7N{qkLmnfc_NfZmyiQ>@I6h$Q_ zhh`FMx2;YT2i{0b4ooK|`})Sm#?~}`^&#FmFq0U++>xML@sIGzSaA2pm< zlEsG{#Km(d!#v}}cNoqI*UHE9wsqV{x=uWw&SWje%BRVRE1HFk^#Pck%`#V`+Tpc1 zY-{;+)?pdbWo{;CXs)HDGKP@pc<46Ht>(3{tc8)!^)>WzoRc+-Jj=L-t-F|+Ms1F( z+b)l0Dc#l4xi>1VICGU;0l#!C@1|`-Pib7!-0}eCHCTE5WWmtp*)=CKiZHL4CDXbM zt^eS`{-fHVU7s7!4jXqWp&51XEV8sOWRMs)P7(v2-s67Lj?^P4sXtsnjMo=Y&pyYbNDqxs-53m982bvBNQajHDg30y=KuyReTi#}sFT2j zFaCLYs01 zj6md*wY$OkzA+@Y$kL;f;F#3Jeue>LLG<(2P@ zs>8m$YqdJ+%j?&vCn59Q>F!h?@#PIY>Uqd?8Uh>p)JfleQ$qa~WWEcV_p`cZ&~a^z zQiSa-65Et-L;NR1`IP)5#Bcx=i^`+r1xn*r6vh`oaz^EgrQl@A$0JOB3C7xXRL%0I z)PC^)kk=Nb?j}xN_p9mw$UM3i5g$Nlj8GG6;%mK-)_S^)$+YnJ#XHoWAi*a;0rhk* zo&SDI`0;h{;gja(gyT=?^7sKFN@ug(+J7;Y!uWD+6g)eqKk(neyo;&qtKBj6KzgAx9|f) zCOWvni(U^h(Sw3Vk_x>mWTJ;gc+sIF6WtMkMK_pCbg4xk9YQkE*%X0v&&WgkiEgGa(K|sVy7MBC-Wf8{brgf3$AL_AJA~I2;YBZl@FEQSF?vpf7ae#q z(didG(n~=mI>aK7UK%pd<0HK2StAp@b^@yfDqv9Pn~+X&=WO~!))Bat+o{LWY?kCF zBXfVU>1im5^ohDDdkZ72Txot@Ks!;Y$dG8_rHTZKHn3EYs?f$GiZVRfaJZ953tI9A z=ciV*@FmLSXg7UazN+ORR>#nm`h()@IB(!SI&D~KHeIA6Iy(TDAF27BxO}rpJY}Pm zo?9+@3P39hy#`dIM-DP+EFwkfYt<6GXv=9Qr~gfF!mV2(p0WOL@4~l+ zJ%L)1r2mE+h*2kG@Um||36I6%88ewJr10Gu-;)`(b^8nw@KZ+C${TikyOql!QQL#u z?675Jo%o?0yPf!6J-P4Dk*>~I*M^vrIuS28wvQ6eboXrfXpkIy3TWOJ^+z%?jwiOB z&3-)K>jSIerSECv=!P9j(@pSthK%bXz7wF-K=Drx9~x{(v}SGMoK#s|PsghOV6Oxl zB{{r6eNb*yj>s*8a{ZvJD7)nbWl(N|I4Iwvq~#Xy;Gn!z8JF83t{s#&_R3p&J)8P_ z#PW7Yxe-vX#f&`$a161-0Y_IIpZECU?ckV4$6|1}b*%Nc(keI@*%iu8h=UltoqpL0 yVUEf+R_V*DbR?-2{!E*FY^s*3U}i1)Jn$FQTR>sMfAriDrj5ATs3AVL82cYOy}Gvm literal 0 HcmV?d00001 diff --git a/philo_one/obj/old_utilc.o b/philo_one/obj/old_utilc.o new file mode 100644 index 0000000000000000000000000000000000000000..6cc909f2c60aa45475a50079d00d615c70e88c68 GIT binary patch literal 4348 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 H0dn?#7brT* literal 0 HcmV?d00001 diff --git a/philo_one/obj/time.o b/philo_one/obj/time.o new file mode 100644 index 0000000000000000000000000000000000000000..5054672e27344c691830b63345d8588a986b5724 GIT binary patch literal 4248 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 literal 0 HcmV?d00001 diff --git a/philo_one/philo_one b/philo_one/philo_one new file mode 100755 index 0000000000000000000000000000000000000000..86b818e8935d065b301e2a2c8e4466cb051ccf31 GIT binary patch literal 18296 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 literal 0 HcmV?d00001 diff --git a/philo_one/srcs/checker.c b/philo_one/srcs/checker.c new file mode 100644 index 0000000..affd844 --- /dev/null +++ b/philo_one/srcs/checker.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* checker.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:17 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:18:17 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/philo_header.h" + +int parse_param(t_all *all, int optional, char **argv) +{ + all->smert = 0; + if (optional) + { + all->nbr_phls = 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->iteration_eat = ft_atoi(argv[5]); + all->opt = 1; + return (check_param(all, 1)); + } + else + { + all->nbr_phls = 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->iteration_eat = 0; + all->opt = 0; + return (check_param(all, 0)); + } +} + +void booller_pars(int quantity, int *bool) +{ + if (quantity == 5) + *bool = 0; + if (quantity == 6) + *bool = 1; +} + +int parse_and_check_values(char **argv, int quantity) +{ + t_all *all; + int bool; + + booller_pars(quantity, &bool); + 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_one/srcs/logic.c b/philo_one/srcs/logic.c index 3058f56..894e72f 100644 --- a/philo_one/srcs/logic.c +++ b/philo_one/srcs/logic.c @@ -1,104 +1,97 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* logic.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:08 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:18:08 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" -void *run_trhead(t_philo *philo) +int check_live(t_all *all) { - philo->worked = 1; - while(1) - { - if (philo->can_run_simulation) - break; - } - if (philo->can_run_simulation) - { - while(philo->can_run_simulation && 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); -} + int i; -void take_forks(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - //printf("less %d %d\n", philo->less_fork, philo->nbr_philo); - //printf("big %d %d\n", philo->more_fork, philo->nbr_philo); - // printf("mutex: %p\n", all->data_philo->mutex); - pthread_mutex_lock(&all->data_philo->mutex[philo->less_fork]); - messages(philo->all_struct, philo, "has taken a fork"); - pthread_mutex_lock(&all->data_philo->mutex[philo->more_fork]); - messages(philo->all_struct, philo, "has taken a fork"); -} -void eating(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - 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); - pthread_mutex_unlock(&all->data_philo->mutex[philo->more_fork]); - pthread_mutex_unlock(&all->data_philo->mutex[philo->less_fork]); - philo->count_eat++; -} -void sleeping(t_philo *philo) -{ - t_all *all; - all = philo->all_struct; - messages(philo->all_struct, philo, "sleeping"); - ft_msleep(philo->all_struct->time_to_sleep); -} - -void cycle(t_philo *philo) -{ - messages(philo->all_struct, philo, "thinking"); - take_forks(philo); - eating(philo); - sleeping(philo); -} - -int run_observer(t_all *all) -{ - int i; i = 0; - time_t time_eat; - while(1) + while (i < all->nbr_phls) + { + if (all->data->philors[i].died) + { + return (1); + } + i++; + } + return (0); +} + +void *run_trhead(t_philo *philo) +{ + while (philo->all_struct->smert != 42) + { + if (philo->all_struct->opt) + { + if (philo->count_eat == philo->all_struct->iteration_eat) + { + philo->all_struct->smert = 42; + } + } + cycle(philo); + } + return (NULL); +} + +int run_observer42(t_all *all, int i) +{ + time_t time_eat; + + pthread_mutex_lock(&all->data->philors[i].eat_mutex); + time_eat = (ft_get_time() - all->start_time) \ + - all->data->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); + } + pthread_mutex_unlock(&all->data->philors[i].eat_mutex); + return (0); +} + +int run_observer(t_all *all) +{ + int i; + + i = 0; + while (1) { i = 0; - while(i < all->number_of_philosophers) + while (i < all->nbr_phls) { 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) + if (run_observer42(all, i) == 2) { - printf("%ld %d died\n", ft_get_time() - all->start_time, i + 1); - return(2); + return (2); } } else - return(2); + return (ft_exit(all)); i++; } } return (0); } -int runner(t_all *all) +int runner(t_all *all) { prepare_resources(all); + all->start_time = ft_get_time(); 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); + return (0); + return (1); } diff --git a/philo_one/srcs/logic_cycle.c b/philo_one/srcs/logic_cycle.c new file mode 100644 index 0000000..89a8f4a --- /dev/null +++ b/philo_one/srcs/logic_cycle.c @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* logic_cycle.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:12 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:18:13 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/philo_header.h" + +void take_forks(t_philo *philo) +{ + t_all *all; + + all = philo->all_struct; + pthread_mutex_lock(&all->data->mutex[philo->less_fork]); + messages(philo->all_struct, philo, "has taken a fork"); + pthread_mutex_lock(&all->data->mutex[philo->more_fork]); + messages(philo->all_struct, philo, "has taken a fork"); +} + +void eating(t_philo *philo) +{ + t_all *all; + + all = philo->all_struct; + pthread_mutex_lock(&philo->eat_mutex); + 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); + pthread_mutex_unlock(&all->data->mutex[philo->more_fork]); + pthread_mutex_unlock(&all->data->mutex[philo->less_fork]); + philo->count_eat++; + pthread_mutex_unlock(&philo->eat_mutex); +} + +void sleeping(t_philo *philo) +{ + t_all *all; + + all = philo->all_struct; + messages(philo->all_struct, philo, "sleeping"); + ft_msleep(philo->all_struct->time_to_sleep); +} + +void cycle(t_philo *philo) +{ + messages(philo->all_struct, philo, "thinking"); + take_forks(philo); + eating(philo); + sleeping(philo); +} diff --git a/philo_one/srcs/main.c b/philo_one/srcs/main.c index 01b6bd3..f389d71 100644 --- a/philo_one/srcs/main.c +++ b/philo_one/srcs/main.c @@ -1,12 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:03 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:18:04 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" -int main(int argc, char **argv) +int main(int argc, char **argv) { if (parse_and_check_values(argv, argc) == 2) - return(0); + return (0); else { return (1); } - return(0); + return (0); } diff --git a/philo_one/srcs/messages.c b/philo_one/srcs/messages.c index ebffc98..5cd6c5e 100644 --- a/philo_one/srcs/messages.c +++ b/philo_one/srcs/messages.c @@ -1,12 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* messages.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:18:00 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:32:45 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" void messages(t_all *all, t_philo *philo, char *str) { - time_t timestemp = ft_get_time() - all->start_time; + time_t timestemp; + + timestemp = ft_get_time() - all->start_time; if (philo->all_struct->smert != 42) { pthread_mutex_lock(&all->write); - printf("%ld %*s%d %s\n", timestemp, philo->nbr_philo * 30, "", philo->nbr_philo + 1, str); + printf("%ld %d %s\n", timestemp, philo->nbr_philo + 1, str); pthread_mutex_unlock(&all->write); } } diff --git a/philo_one/srcs/old_utilc.c b/philo_one/srcs/old_utilc.c index 3d505cb..711a1de 100644 --- a/philo_one/srcs/old_utilc.c +++ b/philo_one/srcs/old_utilc.c @@ -1,6 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* old_utilc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:17:55 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:17:56 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" -int check_f(char ch) +int check_f(char ch) { if (ch == '\t' || ch == '\n' || ch == ' ' || \ ch == '\v' || ch == '\f' || ch == '\r') @@ -9,7 +21,7 @@ int check_f(char ch) return (0); } -int ft_atoi(const char *str) +int ft_atoi(const char *str) { int i; unsigned long int result; diff --git a/philo_one/srcs/parser.c b/philo_one/srcs/parser.c index 55f6723..6b5863b 100644 --- a/philo_one/srcs/parser.c +++ b/philo_one/srcs/parser.c @@ -1,87 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parser.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:17:51 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:17:52 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" -int check_param(t_all *all, int optional) +int check_param(t_all *all, int optional) { if (optional) { - if (all->number_of_philosophers <= 0) - return(1); + if (all->nbr_phls <= 0) + return (1); if (all->time_to_die <= 0) - return(1); + return (1); if (all->time_to_eat <= 0) - return(1); + return (1); if (all->time_to_sleep <= 0) - return(1); - if (all->number_of_times_each_philosopher_must_eat <= 0) - return(1); + return (1); + if (all->iteration_eat <= 0) + return (1); } else { - if (all->number_of_philosophers <= 0) - return(1); + if (all->nbr_phls <= 0) + return (1); if (all->time_to_die <= 0) - return(1); + return (1); if (all->time_to_eat <= 0) - return(1); + return (1); if (all->time_to_sleep <= 0) - return(1); + 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_one/srcs/prepare_simulation.c b/philo_one/srcs/prepare_simulation.c index 0c6ca1b..4e6fa92 100644 --- a/philo_one/srcs/prepare_simulation.c +++ b/philo_one/srcs/prepare_simulation.c @@ -1,32 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* prepare_simulation.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:17:47 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:17:48 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" -int check_all_run(t_all *all) +int check_all_run(t_all *all) { - int i; + int i; i = 0; - while (i < all->number_of_philosophers) + while (i < all->nbr_phls) { - if (all->data_philo->philors[i].worked) - { + if (all->data->philors[i].worked) i++; - } } - printf("все запустились !\n"); return (1); } - void run_simulation(t_all *all) { - int i; + int i; i = 0; - while (i < all->number_of_philosophers) + while (i < all->nbr_phls) { - if (!all->data_philo->philors[i].can_run_simulation) + if (!all->data->philors[i].can_run_simulation) { - all->data_philo->philors[i].can_run_simulation = 1; + all->data->philors[i].can_run_simulation = 1; i++; } } @@ -34,65 +42,63 @@ void run_simulation(t_all *all) void get_fork_for_philo(t_all *all) { - int i; + int i; i = 0; - - while(i < all->number_of_philosophers) + while (i < all->nbr_phls) { if (i == 0) { - all->data_philo->philors[i].less_fork = 0; - all->data_philo->philors[i].more_fork = all->number_of_philosophers - 1; + all->data->philors[i].less_fork = 0; + all->data->philors[i].more_fork = all->nbr_phls - 1; } else { - all->data_philo->philors[i].less_fork = i - 1; - all->data_philo->philors[i].more_fork = i; + all->data->philors[i].less_fork = i - 1; + all->data->philors[i].more_fork = i; } - all->data_philo->philors[i].died = 0; - all->data_philo->philors[i].nbr_philo = i; - all->data_philo->philors[i].worked = 0; - all->data_philo->philors[i].can_run_simulation = 0; - all->data_philo->philors[i].all_struct = all; - all->data_philo->philors[i].is_eat = 0; + all->data->philors[i].died = 0; + all->data->philors[i].nbr_philo = i; + all->data->philors[i].can_run_simulation = 0; + all->data->philors[i].all_struct = all; + all->data->philors[i].is_eat = 0; i++; } } -int prepare_resources(t_all *all) +int prepare_resources(t_all *all) { - int i; + int i; 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) + all->data = ft_calloc(sizeof(t_philo_data), 1); + all->data->mutex = (pthread_mutex_t *) \ + ft_calloc(all->nbr_phls + 1, sizeof(pthread_mutex_t)); + while (i < all->nbr_phls) { - pthread_mutex_init(&all->data_philo->mutex[i], NULL); + pthread_mutex_init(&all->data->mutex[i], NULL); i++; } - all->data_philo->philors = (t_philo *)ft_calloc(all->number_of_philosophers + 1, sizeof(t_philo)); + all->data->philors = (t_philo *) \ + ft_calloc(all->nbr_phls + 1, sizeof(t_philo)); get_fork_for_philo(all); return (0); } void run_all_phils(t_all *all) { - int i; + int i; + void *philo; + i = 0; - void *philo; - while(i <= all->number_of_philosophers) + while (i < all->nbr_phls) { - philo = (void*)(&all->data_philo->philors[i]); - if (pthread_create(&all->data_philo->philors[i].thread, NULL, (void*)run_trhead, philo) == -1) - { + philo = (void *)(&all->data->philors[i]); + if (pthread_create(&all->data->philors[i].thread, \ + NULL, (void *)run_trhead, philo) == -1) printf("I can't create a thread t%d\n", i); - } else - { - pthread_detach(all->data_philo->philors[i].thread); - } + pthread_detach(all->data->philors[i].thread); i++; } } diff --git a/philo_one/srcs/time.c b/philo_one/srcs/time.c index 9bb4559..56745ed 100644 --- a/philo_one/srcs/time.c +++ b/philo_one/srcs/time.c @@ -1,9 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* time.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:17:42 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:17:43 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" time_t ft_get_time(void) { - time_t return_value; - struct timeval current_time; + 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); @@ -11,9 +24,11 @@ time_t ft_get_time(void) void ft_msleep(time_t interval_ms) { - time_t end_ms = ft_get_time() + interval_ms; - time_t now_ms = ft_get_time(); + time_t end_ms; + time_t now_ms; + end_ms = ft_get_time() + interval_ms; + now_ms = ft_get_time(); while (now_ms < end_ms) { usleep(_SLEEP_STEP); @@ -24,6 +39,7 @@ void ft_msleep(time_t interval_ms) long get_time(void) { struct timeval time; + gettimeofday(&time, NULL); return ((long)(time.tv_sec * 1000 + time.tv_usec / 1000)); } @@ -31,6 +47,7 @@ long get_time(void) void my_usleep(long time) { long t; + t = get_time(); while (get_time() - t < time) usleep(1); diff --git a/philo_one/srcs/utilc.c b/philo_one/srcs/utilc.c index fc24656..64cb99f 100644 --- a/philo_one/srcs/utilc.c +++ b/philo_one/srcs/utilc.c @@ -1,53 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utilc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mdenys +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2021/05/18 21:17:31 by mdenys #+# #+# */ +/* Updated: 2021/05/18 21:17:37 by mdenys ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../includes/philo_header.h" t_all *structalloc_and_bzero(void) { - t_all *all; + t_all *all; all = ft_calloc(sizeof(t_all), 1); - all->number_of_philosophers = -1; + all->nbr_phls = -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); + all->iteration_eat = -1; + return (all); } -int return_big(int a, int b) +int ft_exit(t_all *all) { - 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; + int i; i = 0; - all->smert = 42; - ft_msleep(200); - while (i < all->number_of_philosophers) + while (i < all->nbr_phls) { - pthread_mutex_destroy(&all->data_philo->philors[i].eat_mutex); - pthread_mutex_destroy(&all->data_philo->mutex[i]); - i++; - } - i = 0; - while (i < all->number_of_philosophers) - { - free(&all->data_philo->philors[i]); + pthread_mutex_destroy(&all->data->philors[i].eat_mutex); + pthread_mutex_destroy(&all->data->mutex[i]); i++; } + free(all->data->philors); + free(all->data); + free(all); + return (1); } diff --git a/philo_two/Makefile b/philo_two/Makefile new file mode 100644 index 0000000..b183fa6 --- /dev/null +++ b/philo_two/Makefile @@ -0,0 +1,47 @@ +.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 new file mode 100644 index 0000000..d280ce8 --- /dev/null +++ b/philo_two/includes/philo_header.h @@ -0,0 +1,83 @@ +#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 new file mode 100644 index 0000000000000000000000000000000000000000..74b3560ed06146929dabdf00dceaa273ba79ff02 GIT binary patch literal 3236 zcmb7GeP~-%6u&Po_oYqRBwhDa{0cZ(-E2PGX2;Aloqh7wtuW>~J8(YJG)*(pmyo=! zoh~pMCw;_Ws!Tz!><__#2r~R*qJOk*Zcdba2ySBksMtvh3JxYKTd|&V-+k?xZdebT zd(S!doZmh7ymN1I@%EqpI0z9$0t2uexSqn`0|u%CK8eQr&_&5yP%s9_(gBkoyU_@w zs(QR%H)T`bBe(CF*DWcJNdO@pZo9gQ5E~loVqIG(8-?-0jp=K!Ni z#7lP^h+#-M-er!rhU3*$a$$bDe}0*0tQ_y}GQ6!z#M2LD?s?ui-s4AkKGFZgGy5;0 z^{ScP4y`=DVUD++cP&Zxe)%ucJr>gF3UJ$|W zYlIsWz{8S8toyd8|KiQGfOV5yJAhs|92biAvnPq_5 z{xePZl=)(*sFv^@jAwJnwB`$i{6T-vSI?{sp->Ps|Ar0zP~+poAIN26xj>h$CiQgG zA0vUb9E1gWI^)`*T%b9gdsRP=a1f$( zq~cnFBsHCAq%)@zruJ&NWI~H~`k1{VOOiyW5gv2bQqk>Q^?>{HZFM!mGH4H*hitEf zE4YS;?q^&sXivKzJeNt4)uMZg>uJ~8y6v^k!mlx<#Kuh+AZ=WrIu-{(5w8N9??(me z?J5!k3sRFgu@QeVZ2=I)J{Tmyi~w;XEC_oKgCuy@!ANaG`rAzV9!AMF)IEgSGF$_# z^Ehg?KbqPrAEUOMYcG9*+6vT&Bf^p)WGmYCVkZb9A_D$lhA;A{eilVplvqR$yZ8Z2 z4oFdXp-Dj;ytv44zZs!TAQFK#nMK3vmri(Gzs;Q846*{uwuAXSU?g@tn4ete|R^1YA5)q!1y-@kB)m`k=6hM z;ip0qem8Ey%Ag6$#Z7BL#NrTw|2Oc6L91`^{GajW1(9q3o_9rz(t;+&y-V25xMPW3 z0TAX0dj-fG=d6T8xCOs8(4uv#EW&HMiO}yAyj6~h5_sVO@V!298;dhL%kiOe-QG8C z&sAH0>(H+m`1BpqkMFa{?@_?ClX~zJ1mTXm8YfH!STLUjc#Y=X1zaJOW;s9-y#jSP zPti)LMND?l8gZ4MR(8>q?WjrOsxb9RTVXX!9Xhpx_(U&VC$-a13*Fp8w}k2DFl`*5 zo5FNum{tu?X@H7Sf>vChlGFlXH+4!S>X3F&=^g3<7<-sj1B?w;t69#~vnqOLHtg=yt51nq#JVSwDn00hv9xUZs}+MRvW)ys?&Q0>>L z?HG0L2XBnE*`OvQ0mp@NH{kCoP{aE$KsBUBK0nN7AD>}j>znwDm2<-oVI?G_26PXX aK_vKh=q?p{ocEyG6HTSkF``-xO31$eqY-8R literal 0 HcmV?d00001 diff --git a/philo_two/obj/ft_strjoin.o b/philo_two/obj/ft_strjoin.o new file mode 100644 index 0000000000000000000000000000000000000000..66270abc31bda4bbd14af51e746482e35c2063a3 GIT binary patch literal 2784 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 VLz|FFleYS#X1bZHgj1hW{|`c1^dA5K literal 0 HcmV?d00001 diff --git a/philo_two/obj/main.o b/philo_two/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..dfc0ba2b033eb1a3958041eb763aac4254d7dfb2 GIT binary patch literal 2356 zcmb7F&2QXP5FhWxZqiMiZBs;}0y5C5DbW3(2PCLU0twwBBv8L7Na)4uIJ=wf+Q#QXILRTTK30YRTmo9k{FUgOuF@MLqu^X-9n7LIePAujgSQAWA=Q)^=$+I`(>bQ@jA96A+va2 zFdhr|eaHIjAZWY7vpa5tHDvL=WS~=A->qHZ`SodsQnGlzG2Rizv#2??Qf9xY`U2a@ z;;m)y#&(Gp&j;J?*W%TuxTfZgc&h&zURMO&x|gl*2ID=#ct1TDUYy1Iit&yz-d{W7 zIerJvEf!sGw&hI<@!DAWxPM?gi=9R6JNlGwCEwdd8>#>y+@_ccv0D;*>-T$`@kZ2Z zs4yOzPylEqI?3ewZMQs$nBDI%&y}}1DL_1;JNK#YS$ua0S+<3_7Y7eA5|u^%zcG*W zgMDhWVLk8$a+)YN;k17@`o-GPAGO6h#qY=0D12#QwYJo~S6g1Vx7=O5O|He&+`tF@ zsBp-ibc3kVip%3`wZ-p>?|eH-AEo8AZLeX?xM9@tJ*!$RRZ10WSb9%Xs};0LCr_5D z&mD(SISQSq+_76;$$|342y@DvN!Oc?%42SHCH8}I5c<=u6G!Es*=qZdA2caQ8X}(c zfs&!+#bAdGhaNNFH0=^*W8_fYe7^8P;n>jG z!58r-k=G%|uCs$Ux{pBKJY6W@G3x_B9_S*|LL;9n8d*9NZG+xz>Q~L4C^voNLZ**-o*M~3wk13oJPb+D#EtkgE2F(bP m*sd@j(NRGnHD%&(3hXd)g^gp=X}Zo8F=My8_}dWbF#iXfejZ`~ literal 0 HcmV?d00001 diff --git a/philo_two/obj/messages.o b/philo_two/obj/messages.o new file mode 100644 index 0000000000000000000000000000000000000000..4ead5b400317ae041abc5437ee7dfc6c19199de5 GIT binary patch literal 5092 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 literal 0 HcmV?d00001 diff --git a/philo_two/obj/parser.o b/philo_two/obj/parser.o new file mode 100644 index 0000000000000000000000000000000000000000..cff51fe1a416ef73f915029548859f86e6681842 GIT binary patch literal 6840 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 EF9I$s6#xJL literal 0 HcmV?d00001 diff --git a/philo_two/obj/prepare_simulation.o b/philo_two/obj/prepare_simulation.o new file mode 100644 index 0000000000000000000000000000000000000000..260d1bcf6640bc8ed82542ec8934c91550e18f85 GIT binary patch literal 7520 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 By4C;y literal 0 HcmV?d00001 diff --git a/philo_two/philo_two b/philo_two/philo_two new file mode 100755 index 0000000000000000000000000000000000000000..a96f5071c4a928f2f3eb3e455c33c3071c8a53fb GIT binary patch literal 18736 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 rp4F~gDlBcHXv^LEv}LIFwitWkmpcQh= 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 new file mode 100644 index 0000000..b1208f0 --- /dev/null +++ b/philo_two/srcs/ft_strjoin.c @@ -0,0 +1,22 @@ +#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 new file mode 100644 index 0000000..d3a1634 --- /dev/null +++ b/philo_two/srcs/logic.c @@ -0,0 +1,94 @@ +#include "../includes/philo_header.h" + +void *run_trhead(t_philo *philo) +{ + 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; + 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; + philo->count_eat++; + ft_msleep(philo->all_struct->time_to_eat); + sem_post(all->data_philo->sems); + sem_post(all->data_philo->sems); + sem_post(philo->eat_sem); +} +void sleeping(t_philo *philo) +{ + t_all *all; + all = philo->all_struct; + messages(philo->all_struct, philo, "sleeping"); + ft_msleep(philo->all_struct->time_to_sleep); +} + +void cycle(t_philo *philo) +{ + messages(philo->all_struct, philo, "thinking"); + 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) + { + + 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); + all->smert = 42; + return(2); + } + } + else + return(2); + i++; + } + ft_msleep(1); + } + return (0); +} + +int runner(t_all *all) +{ + prepare_resources(all); + all->start_time = ft_get_time(); + run_all_phils(all); + if (!run_observer(all)) + return(0); + return(1); +} diff --git a/philo_two/srcs/main.c b/philo_two/srcs/main.c new file mode 100644 index 0000000..01b6bd3 --- /dev/null +++ b/philo_two/srcs/main.c @@ -0,0 +1,12 @@ +#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 new file mode 100644 index 0000000..68e3136 --- /dev/null +++ b/philo_two/srcs/messages.c @@ -0,0 +1,14 @@ +#include "../includes/philo_header.h" + +void messages(t_all *all, t_philo *philo, char *str) +{ + time_t timestemp; + + timestemp = ft_get_time() - all->start_time; + if (philo->all_struct->smert != 42) + { + sem_wait(all->write); + printf("%ld %d %s\n", timestemp, philo->nbr_philo + 1, str); + sem_post(all->write); + } +} diff --git a/philo_two/srcs/old_utilc.c b/philo_two/srcs/old_utilc.c new file mode 100644 index 0000000..3d505cb --- /dev/null +++ b/philo_two/srcs/old_utilc.c @@ -0,0 +1,57 @@ +#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 new file mode 100644 index 0000000..55f6723 --- /dev/null +++ b/philo_two/srcs/parser.c @@ -0,0 +1,87 @@ +#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 new file mode 100644 index 0000000..bc59d2b --- /dev/null +++ b/philo_two/srcs/prepare_simulation.c @@ -0,0 +1,82 @@ +#include "../includes/philo_header.h" + +int check_all_run(t_all *all) +{ + int i; + + i = 0; + while (i < all->number_of_philosophers) + { + if (all->data_philo->philors[i].worked) + { + i++; + } + } + return (1); +} + +void run_simulation(t_all *all) +{ + int i; + + i = 0; + while (i < all->number_of_philosophers) + { + if (!all->data_philo->philors[i].can_run_simulation) + { + all->data_philo->philors[i].can_run_simulation = 1; + i++; + } + } +} + +void get_data_f_philo(t_all *all) +{ + int i; + + i = 0; + while (i < all->number_of_philosophers) + { + all->data_philo->philors[i].died = 0; + all->data_philo->philors[i].nbr_philo = i; + all->data_philo->philors[i].worked = 0; + all->data_philo->philors[i].can_run_simulation = 0; + all->data_philo->philors[i].all_struct = all; + all->data_philo->philors[i].is_eat = 0; + 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); + i++; + } +} + +int prepare_resources(t_all *all) +{ + int i; + + i = 0; + all->data_philo = ft_calloc(sizeof(t_philo_data), 1); + all->data_philo->sems = reopen_sem(_SEM_NAME_FORKS, all->number_of_philosophers); + all->write = reopen_sem(_SEM_WRITE_LOCK, 1); + all->data_philo->philors = (t_philo *)ft_calloc(all->number_of_philosophers \ + + 1, sizeof(t_philo)); + get_data_f_philo(all); + return (0); +} + +void run_all_phils(t_all *all) +{ + void *philo; + int i; + + i = 0; + 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) + printf("I can't create a thread t%d\n", i); + else + pthread_detach(all->data_philo->philors[i].thread); + i++; + } +} diff --git a/philo_two/srcs/time.c b/philo_two/srcs/time.c new file mode 100644 index 0000000..1b74927 --- /dev/null +++ b/philo_two/srcs/time.c @@ -0,0 +1,42 @@ +#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; + time_t now_ms; + + end_ms = ft_get_time() + interval_ms; + 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 new file mode 100644 index 0000000..a61df6c --- /dev/null +++ b/philo_two/srcs/utilc.c @@ -0,0 +1,93 @@ +#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); +} + +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)); +} diff --git a/workspace.code-workspace b/workspace.code-workspace deleted file mode 100644 index 40fe023..0000000 --- a/workspace.code-workspace +++ /dev/null @@ -1,10 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - { - "path": "." - } - ] -} \ No newline at end of file