latest commit
This commit is contained in:
parent
b1db9fe912
commit
8346d011dd
@ -37,6 +37,7 @@ typedef struct s_philo
|
|||||||
time_t last_eat;
|
time_t last_eat;
|
||||||
time_t limit;
|
time_t limit;
|
||||||
t_all *all_struct;
|
t_all *all_struct;
|
||||||
|
int is_eat;
|
||||||
pthread_mutex_t eat_mutex;
|
pthread_mutex_t eat_mutex;
|
||||||
} t_philo;
|
} t_philo;
|
||||||
|
|
||||||
|
|||||||
@ -10,8 +10,12 @@ void *run_trhead(t_philo *philo)
|
|||||||
}
|
}
|
||||||
if (philo->can_run_simulation)
|
if (philo->can_run_simulation)
|
||||||
{
|
{
|
||||||
|
philo->last_eat = ft_get_time();
|
||||||
|
philo->limit = philo->last_eat + philo->all_struct->time_to_die;
|
||||||
while(philo->can_run_simulation)
|
while(philo->can_run_simulation)
|
||||||
|
{
|
||||||
cycle(philo);
|
cycle(philo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
@ -69,6 +73,14 @@ int run_observer(t_all *all)
|
|||||||
i = 0;
|
i = 0;
|
||||||
while(i <= all->number_of_philosophers)
|
while(i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (!all->data_philo->philors[i].is_eat && ft_get_time() > all->data_philo->philors[i].limit)
|
||||||
|
{
|
||||||
|
// TODO пофиксить смерть
|
||||||
|
printf("симуляция окончена фил умер\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (all->data_philo->philors[i].died == 0)
|
if (all->data_philo->philors[i].died == 0)
|
||||||
{
|
{
|
||||||
time = ft_get_time();
|
time = ft_get_time();
|
||||||
|
|||||||
@ -5,7 +5,7 @@ int check_all_run(t_all *all)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < all->number_of_philosophers)
|
while (i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
if (all->data_philo->philors[i].worked)
|
if (all->data_philo->philors[i].worked)
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ void run_simulation(t_all *all)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < all->number_of_philosophers)
|
while (i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
if (!all->data_philo->philors[i].can_run_simulation)
|
if (!all->data_philo->philors[i].can_run_simulation)
|
||||||
{
|
{
|
||||||
@ -38,7 +38,7 @@ void get_fork_for_philo(t_all *all)
|
|||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
while(i < all->number_of_philosophers)
|
while(i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
@ -55,6 +55,7 @@ void get_fork_for_philo(t_all *all)
|
|||||||
all->data_philo->philors[i].worked = 0;
|
all->data_philo->philors[i].worked = 0;
|
||||||
all->data_philo->philors[i].can_run_simulation = 0;
|
all->data_philo->philors[i].can_run_simulation = 0;
|
||||||
all->data_philo->philors[i].all_struct = all;
|
all->data_philo->philors[i].all_struct = all;
|
||||||
|
all->data_philo->philors[i].is_eat = 0;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,7 +67,7 @@ int prepare_resources(t_all *all)
|
|||||||
i = 0;
|
i = 0;
|
||||||
all->data_philo = ft_calloc(sizeof(t_philo_data), 1);
|
all->data_philo = ft_calloc(sizeof(t_philo_data), 1);
|
||||||
all->data_philo->mutex = (pthread_mutex_t *)ft_calloc(sizeof(pthread_mutex_t), all->number_of_philosophers);
|
all->data_philo->mutex = (pthread_mutex_t *)ft_calloc(sizeof(pthread_mutex_t), all->number_of_philosophers);
|
||||||
while (i < all->number_of_philosophers)
|
while (i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
pthread_mutex_init(&all->data_philo->mutex[i], NULL);
|
pthread_mutex_init(&all->data_philo->mutex[i], NULL);
|
||||||
i++;
|
i++;
|
||||||
@ -82,7 +83,7 @@ void run_all_phils(t_all *all)
|
|||||||
i = 0;
|
i = 0;
|
||||||
char *str;
|
char *str;
|
||||||
void *philo;
|
void *philo;
|
||||||
while(i < all->number_of_philosophers)
|
while(i <= all->number_of_philosophers)
|
||||||
{
|
{
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user