-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_philo2.c
More file actions
75 lines (68 loc) · 2.43 KB
/
create_philo2.c
File metadata and controls
75 lines (68 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* create_philo2.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: yael-yas <yael-yas@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/03/25 09:56:59 by yael-yas #+# #+# */
/* Updated: 2025/04/04 19:19:08 by yael-yas ### ########.fr */
/* */
/* ************************************************************************** */
#include "philo.h"
void one_philo(t_philosopher *philo, t_param *params, pthread_mutex_t *forks,
pthread_t *threads)
{
int i;
i = 0;
philo = malloc(sizeof(t_philosopher));
pthread_mutex_init(&forks[i], NULL);
philo[i].left_fork = &forks[i];
philo[i].params = params;
pthread_create(&threads[i], NULL, handle_one_philo, &philo[i]);
pthread_join(threads[i], NULL);
pthread_mutex_destroy(&forks[i]);
free(philo);
}
t_param create_struct(int argc, char **argv)
{
t_param params;
params.number_of_philos = ft_atoi(argv[1]);
params.time_to_die = ft_atoi(argv[2]);
params.time_to_eat = ft_atoi(argv[3]);
params.arg_six = 0;
params.count_eating = 0;
params.time_to_sleep = ft_atoi(argv[4]);
params.is_dead = 0;
if (argc == 6)
{
params.num_philo_eat = ft_atoi(argv[5]);
params.arg_six = 1;
}
if (params.number_of_philos < 1)
exit(EXIT_FAILURE);
if (params.num_philo_eat == 0 && params.arg_six == 1)
exit(EXIT_FAILURE);
return (params);
}
t_philosopher *initialize_philos(t_param *params, pthread_mutex_t *forks)
{
t_philosopher *philosophers;
int i;
i = 0;
philosophers = malloc(sizeof(t_philosopher) * params->number_of_philos);
while (i < params->number_of_philos)
{
philosophers[i].id = i + 1;
philosophers[i].count_eaten = 0;
philosophers[i].params = params;
philosophers[i].last_meal = get_time();
philosophers[i].stop = 0;
philosophers[i].left_fork = &forks[i];
philosophers[i].right_fork = &forks[((i + 1)
% params->number_of_philos)];
pthread_mutex_init(&philosophers[i].last_meal_mutex, NULL);
i++;
}
return (philosophers);
}