「🏗️」 wip: testing things, might broke.
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/07/22 21:24:53 by adjoly #+# #+# */
|
||||
/* Updated: 2024/07/26 15:15:13 by adjoly ### ########.fr */
|
||||
/* Updated: 2024/07/31 22:10:31 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,39 +16,40 @@
|
||||
|
||||
void take_fork(t_fork *fork, int id)
|
||||
{
|
||||
if (id % 2)
|
||||
{
|
||||
if (id % 2 && !(&fork->left == fork->right))
|
||||
pthread_mutex_lock(&fork->left);
|
||||
}
|
||||
else
|
||||
{
|
||||
else if (!(id % 2))
|
||||
pthread_mutex_lock(fork->right);
|
||||
}
|
||||
}
|
||||
|
||||
void *philo_routine(void *content)
|
||||
{
|
||||
t_philo philo;
|
||||
t_philo *philo;
|
||||
bool death;
|
||||
int i = 0;
|
||||
|
||||
philo = *(t_philo *)content;
|
||||
gettimeofday(&(philo.t0), NULL);
|
||||
while (i < philo.data.meal_nbr)
|
||||
philo = content;
|
||||
gettimeofday(&(philo->eat), NULL);
|
||||
philo->meal_left = get_meal_nb(philo->data.meal_nbr, philo->data.no_meal);
|
||||
while (1)
|
||||
{
|
||||
philo.state = FORK_TAKEN;
|
||||
take_fork(&philo.fork, philo.id);
|
||||
log_philo(philo);
|
||||
take_fork(&philo.fork, philo.id + 1);
|
||||
log_philo(philo);
|
||||
philo.state = EAT;
|
||||
log_philo(philo);
|
||||
death = sleep_phil(philo.data.eat_time, philo.check);
|
||||
if (eat(philo) == true)
|
||||
break ;
|
||||
// unlock pas les fourchet si po la
|
||||
pthread_mutex_unlock(&philo->fork.left);
|
||||
pthread_mutex_unlock(philo->fork.right);
|
||||
if (philo->data.no_meal == false)
|
||||
philo->meal_left--;
|
||||
philo->state = SLEEP;
|
||||
log_philo(*philo);
|
||||
death = sleep_phil(*philo);
|
||||
if (death == true)
|
||||
break ;
|
||||
if (!philo->meal_left)
|
||||
return (NULL);
|
||||
pthread_mutex_unlock(philo.fork.right);
|
||||
pthread_mutex_unlock(&philo.fork.left);
|
||||
i++;
|
||||
philo->state = THINK;
|
||||
log_philo(*philo);
|
||||
}
|
||||
philo->state = DEAD;
|
||||
log_philo(*philo);
|
||||
return (NULL);
|
||||
}
|
||||
|
Reference in New Issue
Block a user