Implement is_alive function
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 24 May 2024 06:46:45 +0000 (08:46 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 24 May 2024 06:46:45 +0000 (08:46 +0200)
Also use it in print_timestamp so that the "philosopher died" message
is the last one.

philo_bonus/helpers.c
philo_bonus/philo.h

index fd44d42c165bba2d8f910e16c5095ddb11a2c91b..02c3e977ce5d469c2ed2fcfc0f3c81684a89ee99 100644 (file)
@@ -23,11 +23,24 @@ useconds_t  usecs_since_start(struct timeval start)
                + time.tv_usec - start.tv_usec);
 }
 
+int    is_alive(t_philo *philo)
+{
+       int     res;
+
+       sem_wait(philo->philo_sem);
+       res = philo->lives;
+       sem_post(philo->philo_sem);
+       return (res);
+}
+
 void   print_timestamp(t_philo *philo, const char *str)
 {
-       sem_wait(philo->semaphores[term]);
-       printf("%u %u %s\n", usecs_since_start(philo->settings.start)
-               / 1000, philo->id, str);
-       sem_post(philo->semaphores[term]);
+       if (is_alive(philo))
+       {
+               sem_wait(philo->semaphores[term]);
+               printf("%u %u %s\n", usecs_since_start(philo->settings.start)
+                       / 1000, philo->id, str);
+               sem_post(philo->semaphores[term]);
+       }
        return ;
 }
index 8b3a1d6c7d7d5bad7bfc8fc3d92e6ea8489f0a61..1f114a85184af497e739dcc8ab85fc0f9037474c 100644 (file)
@@ -72,6 +72,7 @@ void          cleanup(pid_t *philo_pids, sem_t *semaphores[sem_num]);
 
 useconds_t     usecs_since_start(struct timeval start);
 int                    report(t_philo *philo, const char *str);
+int                    is_alive(t_philo *philo);
 void           print_timestamp(t_philo *philo, const char *str);
 
 void           be_a_philosopher(t_philo *philo);