]> git.dkaiser.de - 42/Philosophers.git/commitdiff
Add rudimentary think and sleep funcs
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 11:41:50 +0000 (12:41 +0100)
committerDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 11:41:50 +0000 (12:41 +0100)
philo/src/simulation.c

index b77a5d50472a6f5a0b3e6d4b8fbd762e197303b2..54ac8e5ac2a6e00ee4e0aa52ec42f7ba85f6df2c 100644 (file)
@@ -6,33 +6,44 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 14:38:04 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 12:26:53 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 12:41:31 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "philo.h"
 
-int eat(t_philo *philo)
+void philo_eat(t_philo *philo)
 {
     t_fork *left_fork;
     t_fork *right_fork;
 
     left_fork = &philo->data->forks[philo->id];
     right_fork = &philo->data->forks[(philo->id + 1) % philo->data->nbr_of_philos];
-    if (left_fork->available && right_fork->available)
+    while (!left_fork->available || !right_fork->available)
     {
-        pthread_mutex_lock(&left_fork->mutex);
-        pthread_mutex_lock(&right_fork->mutex);
-        left_fork->available = 0;
-        right_fork->available = 0;
-        printf("Philo %d is eating\n", philo->id);
-        usleep(1000000);
-        left_fork->available = 1;
-        right_fork->available = 1;
-        pthread_mutex_unlock(&left_fork->mutex);
-        pthread_mutex_unlock(&right_fork->mutex);
+        // die if waiting too long
     }
-   return (EXIT_SUCCESS);
+    pthread_mutex_lock(&left_fork->mutex);
+    pthread_mutex_lock(&right_fork->mutex);
+    left_fork->available = 0;
+    right_fork->available = 0;
+    printf("Philo %d is eating\n", philo->id);
+    usleep(1000000);
+    left_fork->available = 1;
+    right_fork->available = 1;
+    pthread_mutex_unlock(&left_fork->mutex);
+    pthread_mutex_unlock(&right_fork->mutex);
+}
+
+void philo_sleep(t_philo *philo)
+{
+    printf("Philo %d is sleeping\n", philo->id);
+    usleep(1000000);
+}
+
+void philo_think(t_philo *philo)
+{
+    printf("Philo %d is thinking\n", philo->id);
 }
 
 int *process_philo(void *arg)
@@ -47,10 +58,9 @@ int *process_philo(void *arg)
     *result = EXIT_SUCCESS;
     while (philo->data->simulation_running)
     {
-        *result = eat(philo);
-        printf("Philo %d is sleeping\n", philo->id);
-        usleep(1000000);
-        //think
+        philo_eat(philo);
+        philo_sleep(philo);
+        philo_think(philo);
     }
     return (result);
 }