diff options
Diffstat (limited to 'philo_one')
| -rw-r--r-- | philo_one/Makefile | 4 | ||||
| -rw-r--r-- | philo_one/src/event.c | 4 | ||||
| -rw-r--r-- | philo_one/src/main.c | 16 | ||||
| -rw-r--r-- | philo_one/src/philo.c | 6 | ||||
| -rw-r--r-- | philo_one/src/routine.c | 8 |
5 files changed, 29 insertions, 9 deletions
diff --git a/philo_one/Makefile b/philo_one/Makefile index e976a50..c58aa6e 100644 --- a/philo_one/Makefile +++ b/philo_one/Makefile @@ -6,7 +6,7 @@ # By: cacharle <marvin@42.fr> +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2019/11/24 05:50:15 by cacharle #+# #+# # -# Updated: 2021/01/08 14:31:29 by charles ### ########.fr # +# Updated: 2021/01/08 14:44:00 by charles ### ########.fr # # # # **************************************************************************** # @@ -17,7 +17,7 @@ MAKE = make --no-print-directory COMMONDIR = ../common CC = gcc -CCFLAGS = -std=c99 -Wall -Wextra -Werror -O2 -I$(COMMONDIR)/inc +CCFLAGS = -std=c99 -O2 -I$(COMMONDIR)/inc -Wall -Wextra #-Werror LDFLAGS = -lpthread -L$(COMMONDIR) -lphilocommon NAME = philo_one diff --git a/philo_one/src/event.c b/philo_one/src/event.c index 2e24772..025435f 100644 --- a/philo_one/src/event.c +++ b/philo_one/src/event.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 21:37:50 by cacharle #+# #+# */ -/* Updated: 2021/01/04 12:08:15 by cacharle ### ########.fr */ +/* Updated: 2021/01/08 16:02:43 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,8 +36,6 @@ void event_eat(t_philo *arg) if (philo_finished(arg->conf)) return ; philo_put(arg->id, EVENT_EAT, arg->conf->initial_time); - if (arg->conf->philo_num < 30) - philo_put_flush(); pthread_mutex_unlock(&arg->conf->mutex_stdout); h_sleep(arg->conf->timeout_eat); } diff --git a/philo_one/src/main.c b/philo_one/src/main.c index c1bbe1c..b2dc5ed 100644 --- a/philo_one/src/main.c +++ b/philo_one/src/main.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/11/24 05:53:02 by cacharle #+# #+# */ -/* Updated: 2021/01/04 12:04:45 by cacharle ### ########.fr */ +/* Updated: 2021/01/08 15:20:18 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,6 +42,17 @@ static int st_setup( return (0); } +void *routine_flush(t_philo_conf *conf) +{ + while (true) + { + pthread_mutex_lock(&conf->mutex_stdout); + philo_put_flush(); + pthread_mutex_unlock(&conf->mutex_stdout); + usleep(250000); + } +} + int main(int argc, char **argv) { t_philo_conf conf; @@ -54,6 +65,9 @@ int main(int argc, char **argv) return (0); if (st_setup(&conf, &philos, &forks) != 0) return (1); + pthread_t thread_flush; + pthread_create(&thread_flush, NULL, (t_routine)routine_flush, (void*)&conf); + pthread_detach(thread_flush); conf.initial_time = h_time_now(); if (!philos_start(philos, conf.philo_num)) { diff --git a/philo_one/src/philo.c b/philo_one/src/philo.c index f86dfb6..589e1c7 100644 --- a/philo_one/src/philo.c +++ b/philo_one/src/philo.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/09 23:47:14 by cacharle #+# #+# */ -/* Updated: 2021/01/04 10:42:53 by cacharle ### ########.fr */ +/* Updated: 2021/01/08 16:15:10 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,7 +54,11 @@ bool philos_start(t_philo *philos, long int num) } i = -1; while (++i < num) + { pthread_mutex_unlock(&philos[i].mutex_start); + /* usleep(1000); */ + } + return (true); } diff --git a/philo_one/src/routine.c b/philo_one/src/routine.c index c43d9c3..b3fc71a 100644 --- a/philo_one/src/routine.c +++ b/philo_one/src/routine.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/10 01:11:27 by cacharle #+# #+# */ -/* Updated: 2021/01/04 10:42:48 by cacharle ### ########.fr */ +/* Updated: 2021/01/08 16:14:57 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,8 +38,12 @@ void *routine_philo(t_philo *arg) pthread_mutex_lock(&arg->mutex_start); if (philo_finished(arg->conf)) return (NULL); - if (arg->id % 2 == 0) + if (arg->conf->philo_num % 2 == 0 && arg->id % 2 == 0) usleep(1000); + if (arg->conf->philo_num % 2 == 1 && arg->id % 3 == 0) + usleep(1000); + if (arg->conf->philo_num % 2 == 1 && arg->id % 3 == 1) + usleep(2000); arg->time_last_eat = h_time_now(); if (pthread_create(&thread_death, NULL, (t_routine)routine_death, arg) != 0) return (NULL); |
