diff options
| author | Dominik Kaiser | 2025-01-18 13:04:57 +0100 |
|---|---|---|
| committer | Dominik Kaiser | 2025-01-18 13:04:57 +0100 |
| commit | f38b5cc6975fc2126f4a09f8417cfba5cbcd845c (patch) | |
| tree | cde9e0904c03c7be9b604035eee860218d0851b3 | |
| parent | 7220dcf3ca89897962c1e019ad675bbb6b2e09fa (diff) | |
| download | Philosophers-f38b5cc6975fc2126f4a09f8417cfba5cbcd845c.tar.gz Philosophers-f38b5cc6975fc2126f4a09f8417cfba5cbcd845c.zip | |
Add time_to_eat and time_to_sleep
| -rw-r--r-- | philo/include/ft_utils.h | 4 | ||||
| -rw-r--r-- | philo/src/ft_utils.c | 8 | ||||
| -rw-r--r-- | philo/src/simulation.c | 22 |
3 files changed, 25 insertions, 9 deletions
diff --git a/philo/include/ft_utils.h b/philo/include/ft_utils.h index 19fa2ea..fb0455e 100644 --- a/philo/include/ft_utils.h +++ b/philo/include/ft_utils.h @@ -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" diff --git a/philo/src/ft_utils.c b/philo/src/ft_utils.c index c3570ab..5b62882 100644 --- a/philo/src/ft_utils.c +++ b/philo/src/ft_utils.c @@ -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); } diff --git a/philo/src/simulation.c b/philo/src/simulation.c index 3035385..bc417cf 100644 --- a/philo/src/simulation.c +++ b/philo/src/simulation.c @@ -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) |
