Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Philosophers-42
Path: blob/master/philo_bonus/ft_check_dead_bonus.c
882 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* ft_check_dead_bonus.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: yabtaour <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/05/23 00:06:10 by yabtaour #+# #+# */
9
/* Updated: 2022/05/23 11:42:16 by yabtaour ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
#include "philosophers_bonus.h"
13
14
void ft_kill(t_data *data)
15
{
16
int i;
17
18
i = 0;
19
while (i < data->philos_num)
20
{
21
kill (data->pid[i], SIGINT);
22
i++;
23
}
24
}
25
26
void ft_destroy_sem(t_data *data)
27
{
28
sem_close(data->fork);
29
sem_close(data->output);
30
sem_close(data->eat);
31
sem_unlink("philo_forks");
32
sem_unlink("philo_output");
33
sem_unlink("philo_eat");
34
}
35
36
void ft_end(t_data *data)
37
{
38
ft_kill(data);
39
ft_destroy_sem(data);
40
free(data->pid);
41
free(data);
42
}
43
44
void *ft_check_dead(t_philo *philo)
45
{
46
long long now;
47
long long norm;
48
49
while (1)
50
{
51
now = ft_timestamp();
52
if (philo->eat == philo->data->must_eat)
53
exit(0);
54
if (now - philo->last_meal >= philo->data->time_to_die)
55
{
56
norm = now - philo->data->birth;
57
philo->is_dead = 1;
58
sem_wait(philo->data->output);
59
printf("[%lld] philo %d died\n", norm, philo->philo_id);
60
ft_end(philo->data);
61
exit(1);
62
}
63
usleep(100);
64
}
65
return (NULL);
66
}
67
68