From c2db9acc15e5738d382554ecad02b92b6fdb5a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl?= Date: Tue, 23 Jul 2024 20:03:57 +0200 Subject: [PATCH] Adding some stuff --- philo/sources/main.c | 11 +++-- philo/sources/parsing_args.c | 14 +++--- philo/sources/routine.c | 4 +- philo/test.c | 84 ------------------------------------ 4 files changed, 16 insertions(+), 97 deletions(-) delete mode 100644 philo/test.c diff --git a/philo/sources/main.c b/philo/sources/main.c index d472c76..84645ca 100644 --- a/philo/sources/main.c +++ b/philo/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/04 11:30:25 by rparodi #+# #+# */ -/* Updated: 2024/07/18 21:07:01 by rparodi ### ########.fr */ +/* Updated: 2024/07/23 19:51:07 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,9 +21,12 @@ void *ft_routine(void *ptr) return (NULL); while (!dead_loop(philo)) { - ft_start_eating(philo); - ft_sleeping(philo); - ft_thinking(philo); + if (check_dead(philo) == false) + ft_start_eating(philo); + if (check_dead(philo) == false) + ft_sleeping(philo); + if (check_dead(philo) == false) + ft_thinking(philo); } return (philo); } diff --git a/philo/sources/parsing_args.c b/philo/sources/parsing_args.c index bf4075c..f5653cc 100644 --- a/philo/sources/parsing_args.c +++ b/philo/sources/parsing_args.c @@ -6,11 +6,12 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/04 11:42:37 by rparodi #+# #+# */ -/* Updated: 2024/07/18 21:18:10 by rparodi ### ########.fr */ +/* Updated: 2024/07/23 20:03:47 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "../includes/philo.h" +#include t_error ft_parsing_args(t_i32 argc, t_str *argv, t_philo *philo) { @@ -28,7 +29,7 @@ t_error ft_parsing_args(t_i32 argc, t_str *argv, t_philo *philo) philo->nb_eat = tmp; } else - philo->nb_eat = -1; + philo->nb_eat = ~0u; philo->nb_philo = tmp; ft_atou(argv[2], &tmp); philo->t_death = tmp; @@ -92,10 +93,11 @@ t_error ft_init(t_i32 argc, t_str *argv, t_program *prog, t_philo *philo) { static t_mutex forks[MAXSUPPORT] = {0}; - pthread_mutex_init(&prog->print_lock, NULL); - pthread_mutex_init(&prog->dead_lock, NULL); - pthread_mutex_init(&prog->meal_lock, NULL); - pthread_mutex_init(&prog->check_eating_count, NULL); + prog->print_lock = (t_mutex)PTHREAD_MUTEX_INITIALIZER; + prog->dead_lock = (t_mutex)PTHREAD_MUTEX_INITIALIZER; + prog->meal_lock = (t_mutex)PTHREAD_MUTEX_INITIALIZER; + prog->check_eating_count = (t_mutex)PTHREAD_MUTEX_INITIALIZER; + ft_init_fork(prog->philos, forks); prog->philos = philo; prog->dead_flag = false; if (ft_init_philo(argc, argv, prog, forks)) diff --git a/philo/sources/routine.c b/philo/sources/routine.c index 02594e0..1656413 100644 --- a/philo/sources/routine.c +++ b/philo/sources/routine.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/11 11:42:31 by rparodi #+# #+# */ -/* Updated: 2024/07/18 21:18:49 by rparodi ### ########.fr */ +/* Updated: 2024/07/23 19:49:21 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,8 +51,6 @@ void counting_launch(t_philo *philo, t_u8 *counter) t_usize i; i = 0; - if (philo->nb_eat == -1) - return ; while (i < philo[0].nb_philo) { pthread_mutex_lock(philo[i].check_eating_count); diff --git a/philo/test.c b/philo/test.c deleted file mode 100644 index 3181d44..0000000 --- a/philo/test.c +++ /dev/null @@ -1,84 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* test.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: rparodi +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/09 15:08:23 by rparodi #+# #+# */ -/* Updated: 2024/06/17 12:24:16 by rparodi ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include -#include -#include -#include -#include -#include -#include - -// printf derriere un mutex pour le printf -// zero printf apres une mort -// mort shared avec un mutex -// compte le nombre de ois manger par philo, et chec via un thread si tous a manger X fois - -pthread_t philosopher[15]; -pthread_mutex_t chopstick[15]; - -int ft_sleep(size_t milliseconds) -{ - struct timeval start; - struct timeval tempo; - - gettimeofday(&tempo, NULL); - gettimeofday(&start, NULL); - while ((tempo - start) < milliseconds) - { - usleep(500); - gettimeofday(&tempo, NULL); - } - return (0); -} - -void *func(void *arg) { - int n = *((int *)arg); - printf("Philosopher %d is thinking\n", n); - - pthread_mutex_lock(&chopstick[n]); - pthread_mutex_lock(&chopstick[(n + 1) % 15]); - printf("Philosopher %d is eating\n", n); - ft_sleep(3000000); // sleep for 3 seconds to simulate eating - pthread_mutex_unlock(&chopstick[n]); - pthread_mutex_unlock(&chopstick[(n + 1) % 15]); - printf("Philosopher %d finished eating\n", n); - - free(arg); // Free the allocated memory - return NULL; -} - -int main() { - int i; - - for (i = 0; i < 15; i++) - pthread_mutex_init(&chopstick[i], NULL); - - for (i = 0; i < 15; i++) { - int *arg = malloc(sizeof(*arg)); - if (arg == NULL) { - fprintf(stderr, "Couldn't allocate memory for thread arg.\n"); - exit(EXIT_FAILURE); - } - *arg = i; - pthread_create(&philosopher[i], NULL, func, arg); - } - - for (i = 0; i < 15; i++) - pthread_join(philosopher[i], NULL); - - for (i = 0; i < 15; i++) - pthread_mutex_destroy(&chopstick[i]); - - return 0; -} -