aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--philo/src/main.c3
-rw-r--r--philo/src/simulation.c35
2 files changed, 34 insertions, 4 deletions
diff --git a/philo/src/main.c b/philo/src/main.c
index 1a07271..46d1050 100644
--- a/philo/src/main.c
+++ b/philo/src/main.c
@@ -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);
diff --git a/philo/src/simulation.c b/philo/src/simulation.c
index a64f833..b77a5d5 100644
--- a/philo/src/simulation.c
+++ b/philo/src/simulation.c
@@ -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);
}