aboutsummaryrefslogtreecommitdiff
path: root/philo_one/src/philo.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-01-08 22:11:19 +0100
committerCharles Cabergs <me@cacharle.xyz>2021-01-08 22:11:19 +0100
commita69a877b3a2758aafe3de0db87a56063b28ed00f (patch)
tree2f0e61aa28cea420fd808fb51eee46ba004d9698 /philo_one/src/philo.c
parent36c5e3a81de8b910bc04a37994b53296c1540353 (diff)
downloadphilosophers-a69a877b3a2758aafe3de0db87a56063b28ed00f.tar.gz
philosophers-a69a877b3a2758aafe3de0db87a56063b28ed00f.tar.bz2
philosophers-a69a877b3a2758aafe3de0db87a56063b28ed00f.zip
Add sem_grab in philo_two and philo_three to fix philosophers each taking 1 fork
Diffstat (limited to 'philo_one/src/philo.c')
-rw-r--r--philo_one/src/philo.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/philo_one/src/philo.c b/philo_one/src/philo.c
index 589e1c7..1e98fa0 100644
--- a/philo_one/src/philo.c
+++ b/philo_one/src/philo.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/09 23:47:14 by cacharle #+# #+# */
-/* Updated: 2021/01/08 16:15:10 by charles ### ########.fr */
+/* Updated: 2021/01/08 18:56:10 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -41,6 +41,8 @@ bool philos_start(t_philo *philos, long int num)
i = -1;
while (++i < num)
{
+ if (i % 2 == 0)
+ continue;
if (pthread_create(
&philos[i].thread,
NULL,
@@ -55,8 +57,35 @@ bool philos_start(t_philo *philos, long int num)
i = -1;
while (++i < num)
{
+ if (i % 2 == 0)
+ continue;
pthread_mutex_unlock(&philos[i].mutex_start);
- /* usleep(1000); */
+ /* usleep(200); */
+ }
+ i = -1;
+ while (++i < num)
+ {
+ if (i % 2 == 1)
+ continue;
+ if (pthread_create(
+ &philos[i].thread,
+ NULL,
+ (t_routine)routine_philo,
+ (void*)(philos + i)) != 0)
+ {
+ while (--i >= 0)
+ pthread_detach(philos[i].thread);
+ return (false);
+ }
+ }
+ usleep(1000);
+ i = -1;
+ while (++i < num)
+ {
+ if (i % 2 == 1)
+ continue;
+ pthread_mutex_unlock(&philos[i].mutex_start);
+ /* usleep(200); */
}
return (true);