]> git.dkaiser.de - 42/Philosophers.git/commitdiff
Add time_to_eat and time_to_sleep
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 12:04:57 +0000 (13:04 +0100)
committerDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 12:04:57 +0000 (13:04 +0100)
philo/include/ft_utils.h
philo/src/ft_utils.c
philo/src/simulation.c

index 19fa2ea183a670343f8e331077dff1fd26120d3d..fb0455ea48af1debe89ef7b725f0c0211807e8b1 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 11:57:44 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 12:56:44 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 13:04:16 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -30,7 +30,7 @@ int ft_atoi(const char *str);
 /*
 ** Returns current time in milliseconds
 */
-unsigned int ft_cur_time_in_ms();
+int ft_cur_time_in_ms();
 
 /*
 ** Prints "timestamp_in_ms id str"
index c3570ab6c8f364d39bd5c8ee45694aca4ea09887..5b628822137ffdacffbbee45df4ffee6f9818b4f 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 11:57:11 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 12:55:26 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 13:04:08 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -18,13 +18,13 @@ int ft_err(const char *str)
     return (EXIT_FAILURE);
 }
 
-unsigned int ft_cur_time_in_ms()
+int ft_cur_time_in_ms()
 {
-       unsigned int time_in_ms;
+       int time_in_ms;
        struct timeval t;
 
        gettimeofday(&t, NULL);
-       times_in_ms = (t.tv_sec * 1000) + (t.tv_usec / 1000);
+       time_in_ms = (t.tv_sec * 1000) + (t.tv_usec / 1000);
        return (time_in_ms);
 }
 
index 30353850169318e68de0e30b2ee862c4fde338a4..bc417cf5a91fe35c24bb2018733e4f4b2e80efaa 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 14:38:04 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 12:49:42 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 13:04:32 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -16,6 +16,8 @@ void philo_eat(t_philo *philo)
 {
     t_fork *left_fork;
     t_fork *right_fork;
+    int started_eating;
+    int tte;
 
     left_fork = &philo->data->forks[philo->id];
     right_fork = &philo->data->forks[(philo->id + 1) % philo->data->nbr_of_philos];
@@ -29,8 +31,13 @@ void philo_eat(t_philo *philo)
     ft_log(philo->id, "has taken a fork");
     right_fork->available = 0;
     ft_log(philo->id, "has taken a fork");
+    started_eating = ft_cur_time_in_ms();
+    tte = philo->data->time_to_eat;
     ft_log(philo->id, "is eating");
-    usleep(1000000);
+    while (ft_cur_time_in_ms() < started_eating + tte)
+    {
+        usleep(1000);
+    }
     left_fork->available = 1;
     right_fork->available = 1;
     pthread_mutex_unlock(&left_fork->mutex);
@@ -39,8 +46,17 @@ void philo_eat(t_philo *philo)
 
 void philo_sleep(t_philo *philo)
 {
+    int started_sleeping;
+    int tts;
+
+    started_sleeping = ft_cur_time_in_ms();
+    tts = philo->data->time_to_sleep;
     ft_log(philo->id, "is sleeping");
-    usleep(1000000);
+    while (ft_cur_time_in_ms() < started_sleeping + tts)
+    {
+
+        usleep(1000);
+    }
 }
 
 void philo_think(t_philo *philo)