]> git.dkaiser.de - 42/Philosophers.git/commitdiff
Outsource checking for philos_must_eat to main thread
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 16:11:11 +0000 (17:11 +0100)
committerDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 16:11:11 +0000 (17:11 +0100)
philo/include/philo.h
philo/src/main.c
philo/src/simulation.c

index b4db15b6e089072c8da5168e66ec0fffb7995065..fbcf53f186c5e4ea25b2c256b1c8c77b2db2df21 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 10:23:19 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 16:57:23 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 17:09:50 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -51,6 +51,6 @@ typedef struct s_philo
     t_phdata *data;
 } t_philo;
 
-int run_simulation(int nbr_of_philos, t_philo *philos);
+int run_simulation(int nbr_of_philos, t_philo *philos, t_phdata *data);
 
 #endif
index be9e1b7c68e28da27cfd40fd41766908c73ea121..879bf0b53a6cf43c386fa27f8ce976892ffbb171 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/14 17:13:30 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 16:59:24 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 17:09:26 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -92,7 +92,7 @@ int main(int argc, char *argv[])
     if (result != EXIT_SUCCESS)
         return (result);
     data.simulation_running = 1;
-    result = run_simulation(data.nbr_of_philos, philos);
+    result = run_simulation(data.nbr_of_philos, philos, &data);
     free(philos);
     free(data.forks);
     return (result);
index 75bbe126ffb7f79e99c501430ad82c0d4c532de2..fa8e8866a234798585ed1f4eb4868b062fa0d178 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 14:38:04 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 17:02:27 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 17:09:34 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -106,8 +106,6 @@ int *process_philo(void *arg)
         {
             pthread_mutex_lock(&philo->data->pme_mutex);
             philo->data->philos_must_eat -= 1;
-            if (philo->data->philos_must_eat <= 0)
-                philo->data->simulation_running = 0;
             pthread_mutex_unlock(&philo->data->pme_mutex);
         }
         if (!philo->data->simulation_running)
@@ -120,7 +118,7 @@ int *process_philo(void *arg)
     return (result);
 }
 
-int run_simulation(int nbr_of_philos, t_philo *philos)
+int run_simulation(int nbr_of_philos, t_philo *philos, t_phdata *data)
 {
     int i;
     int result;
@@ -135,6 +133,11 @@ int run_simulation(int nbr_of_philos, t_philo *philos)
             break;
         i++;
     }
+    while (data->simulation_running)
+    {
+            if (data->philos_must_eat <= 0)
+                data->simulation_running = 0;
+    }
     while (i--)
     {
         pthread_join(philos[i].thread, &retval);