/* 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 */
/* */
/* ************************************************************************** */
/*
** Returns current time in milliseconds
*/
-unsigned int ft_cur_time_in_ms();
+int ft_cur_time_in_ms();
/*
** Prints "timestamp_in_ms id str"
/* 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 */
/* */
/* ************************************************************************** */
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);
}
/* 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 */
/* */
/* ************************************************************************** */
{
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];
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);
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)