fix: I create now 1 thread by philo

This commit is contained in:
Camille Chauvet
2023-04-19 11:53:50 +00:00
parent a37cbf88f3
commit 4e27d103a8
6 changed files with 42 additions and 24 deletions

26
philo.c
View File

@ -4,6 +4,8 @@
#include "data.h"
#include <pthread.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include "./print.h"
@ -36,7 +38,7 @@ void eat(t_philo *philo, t_data *data)
pthread_mutex_unlock(&philo->nb_meal_mutex);
pthread_mutex_lock(&data->forks_mutex);
data->forks[philo->id] = 1;
data->forks[(philo->id + 1) % (data->nb_philos) + 1] = 1;
data->forks[(philo->id + 1) % data->nb_philos] = 1;
pthread_mutex_unlock(&data->forks_mutex);
}
@ -53,13 +55,14 @@ bool philo_eat(t_philo *philo, t_data *data)
return (1);
pthread_mutex_lock(&data->forks_mutex);
left_fork = data->forks[philo->id];
right_fork = data->forks[(philo->id + 1) % (data->nb_philos) + 1];
right_fork = data->forks[(philo->id + 1) % data->nb_philos];
if (right_fork && left_fork)
{
data->forks[philo->id] = !left_fork;
data->forks[(philo->id + 1) % (data->nb_philos) + 1] = !right_fork;
data->forks[philo->id] = 0;
data->forks[(philo->id + 1) % data->nb_philos] = 0;
}
pthread_mutex_unlock(&data->forks_mutex);
usleep(10);
}
eat(philo, data);
pthread_mutex_lock(&philo->last_eat_mutex);
@ -82,13 +85,15 @@ void *philo_routine(void *arg)
philo = arg;
data = philo->data;
if (philo->id % 2)
usleep(data->sleep_time * 1000);
while (true)
{
print_thinking(philo);
check(data);
philo_eat(philo, data);
check(data);
print_thinking(philo);
if (check(data))
return (NULL);
if (philo_eat(philo, data))
return (NULL);
if (check(data))
return (NULL);
philo_sleep(data, philo);
@ -107,8 +112,9 @@ t_philo *philo_init(t_data *data)
philo->id = id++;
philo->data = data;
philo->nb_meal = 0;
philo->last_eat = get_time();
pthread_mutex_init(&philo->nb_meal_mutex, NULL);
pthread_mutex_init(&philo->nb_meal_mutex, NULL);
pthread_mutex_init(&philo->nb_meal_mutex, NULL);
pthread_mutex_init(&philo->last_eat_mutex, NULL);
pthread_mutex_init(&philo->last_sleep_mutex, NULL);
return (philo);
}