]> git.dkaiser.de - 42/Philosophers.git/commitdiff
Add eating to simulation
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 11:29:19 +0000 (12:29 +0100)
committerDominik Kaiser <dkaiser@student.42heilbronn.de>
Sat, 18 Jan 2025 11:29:19 +0000 (12:29 +0100)
philo/src/main.c
philo/src/simulation.c

index 1a07271972002df91c9c610c01722111fa8a526d..46d10507b5257a9d388a5b9c1e1430851bef35de 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 11:36:33 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 12:02:24 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -78,6 +78,7 @@ int main(int argc, char *argv[])
     result = init(&philos, &data);
     if (result != EXIT_SUCCESS)
         return (result);
+    data.simulation_running = 1;
     result = run_simulation(data.nbr_of_philos, philos);
     free(philos);
     free(data.forks);
index a64f833fcf125d9fd3bf1ed67f1661b2672449b1..b77a5d50472a6f5a0b3e6d4b8fbd762e197303b2 100644 (file)
@@ -6,13 +6,36 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2025/01/17 14:38:04 by dkaiser           #+#    #+#             */
-/*   Updated: 2025/01/18 11:55:45 by dkaiser          ###   ########.fr       */
+/*   Updated: 2025/01/18 12:26:53 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "philo.h"
 
-int *process_philo(__attribute__((unused)) void *arg)
+int 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)
+    {
+        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);
+    }
+   return (EXIT_SUCCESS);
+}
+
+int *process_philo(void *arg)
 {
     t_philo *philo;
     int *result;
@@ -21,8 +44,14 @@ int *process_philo(__attribute__((unused)) void *arg)
     if (result == NULL)
         return (NULL);
     philo = (t_philo *)arg;
-    printf("Processing philo %d\n", philo->id);
     *result = EXIT_SUCCESS;
+    while (philo->data->simulation_running)
+    {
+        *result = eat(philo);
+        printf("Philo %d is sleeping\n", philo->id);
+        usleep(1000000);
+        //think
+    }
     return (result);
 }