aboutsummaryrefslogtreecommitdiff
path: root/philo/src
diff options
context:
space:
mode:
Diffstat (limited to 'philo/src')
-rw-r--r--philo/src/ft_utils.c8
-rw-r--r--philo/src/simulation.c22
2 files changed, 23 insertions, 7 deletions
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)