/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 11:57:44 by dkaiser #+# #+# */
-/* Updated: 2025/01/17 12:39:17 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 12:47:25 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
# include <stdlib.h>
# include <stdio.h>
+# include <sys/time.h>
/*
** Prints error message and returns EXIT_FAILURE
*/
int ft_atoi(const char *str);
+void ft_log(int id, const char *str);
#endif
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 10:23:19 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:36:45 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 12:46:42 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
# include <stdlib.h>
# include <stdio.h>
# include <pthread.h>
-# include <sys/time.h>
# include "ft_utils.h"
# define ERR_USAGE "Usage: <nbr_of_philos> <ttd> <tte> <tts> [times_must_eat]"
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 11:57:11 by dkaiser #+# #+# */
-/* Updated: 2025/01/17 11:59:28 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 12:47:38 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
return (EXIT_FAILURE);
}
+void ft_log(int id, const char *str)
+{
+ int timestamp_in_ms;
+ struct timeval t;
+
+ gettimeofday(&t, NULL);
+ timestamp_in_ms = (t.tv_sec * 1000) + (t.tv_usec / 1000);
+ printf("%d %d %s\n", timestamp_in_ms, id, str);
+}
+
int ft_atoi(const char *str)
{
int result;
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 12:41:31 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 12:49:42 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
pthread_mutex_lock(&left_fork->mutex);
pthread_mutex_lock(&right_fork->mutex);
left_fork->available = 0;
+ ft_log(philo->id, "has taken a fork");
right_fork->available = 0;
- printf("Philo %d is eating\n", philo->id);
+ ft_log(philo->id, "has taken a fork");
+ ft_log(philo->id, "is eating");
usleep(1000000);
left_fork->available = 1;
right_fork->available = 1;
void philo_sleep(t_philo *philo)
{
- printf("Philo %d is sleeping\n", philo->id);
+ ft_log(philo->id, "is sleeping");
usleep(1000000);
}
void philo_think(t_philo *philo)
{
- printf("Philo %d is thinking\n", philo->id);
+ ft_log(philo->id, "is thinking");
}
int *process_philo(void *arg)