latest commit

This commit is contained in:
Denis 2021-05-15 12:28:07 +03:00
parent b1db9fe912
commit 8346d011dd
3 changed files with 19 additions and 5 deletions

View File

@ -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;

View File

@ -10,9 +10,13 @@ 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();

View File

@ -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)
{ {