Path: blob/master/philo_bonus/ft_start_philos_bonus.c
882 views
/* ************************************************************************** */1/* */2/* ::: :::::::: */3/* ft_start_philos_bonus.c :+: :+: :+: */4/* +:+ +:+ +:+ */5/* By: yabtaour <[email protected]> +#+ +:+ +#+ */6/* +#+#+#+#+#+ +#+ */7/* Created: 2022/05/23 00:08:10 by yabtaour #+# #+# */8/* Updated: 2022/05/23 11:43:41 by yabtaour ### ########.fr */9/* */10/* ************************************************************************** */11#include "philosophers_bonus.h"1213void ft_eat(t_philo *philosopher)14{15sem_wait(philosopher->data->fork);16ft_output(philosopher->data, philosopher->philo_id, "has taken a fork");17sem_wait(philosopher->data->fork);18ft_output(philosopher->data, philosopher->philo_id, "has taken a fork");19philosopher->last_meal = ft_timestamp();20ft_output(philosopher->data, philosopher->philo_id, "is eating");21ft_sleep(philosopher->data->time_to_eat, philosopher->data);22sem_post(philosopher->data->fork);23sem_post(philosopher->data->fork);24philosopher->eat++;25}2627void ft_routine(t_philo *philo)28{29while (!(philo->is_dead) && philo->eat != philo->data->must_eat)30{31ft_eat(philo);32ft_output(philo->data, philo->philo_id, "is sleeping");33ft_sleep(philo->data->time_to_sleep, philo->data);34ft_output(philo->data, philo->philo_id, "is thinking");35}36}3738void *ft_start_philosophers(t_data *data, int i)39{40t_philo philo;4142philo.data = data;43philo.philo_id = i + 1;44philo.is_dead = 0;45philo.eat = 0;46philo.last_meal = ft_timestamp();47pthread_create(philo.thread_id, NULL, (void *)ft_check_dead, &philo);48ft_routine(&philo);49pthread_detach(*philo.thread_id);50return (NULL);51}525354