/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 10:23:19 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:22:15 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:36:45 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
t_phdata *data;
} t_philo;
-void run_simulation(int nbr_of_philos, t_philo *philos);
+int run_simulation(int nbr_of_philos, t_philo *philos);
#endif
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/14 17:13:30 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:33:45 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:36:33 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
result = init(&philos, &data);
if (result != EXIT_SUCCESS)
return (result);
- run_simulation(data.nbr_of_philos, philos);
+ result = run_simulation(data.nbr_of_philos, philos);
free(philos);
free(data.forks);
return (result);
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/17 14:38:04 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 11:26:17 by dkaiser ### ########.fr */
+/* Updated: 2025/01/18 11:55:45 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "philo.h"
+int *process_philo(__attribute__((unused)) void *arg)
+{
+ t_philo *philo;
+ int *result;
+
+ result = malloc(sizeof(int));
+ if (result == NULL)
+ return (NULL);
+ philo = (t_philo *)arg;
+ printf("Processing philo %d\n", philo->id);
+ *result = EXIT_SUCCESS;
+ return (result);
+}
-void run_simulation(int nbr_of_philos, __attribute__((unused))t_philo *philos)
+int run_simulation(int nbr_of_philos, t_philo *philos)
{
int i;
+ int result;
+ void *retval;
i = 0;
+ result = EXIT_SUCCESS;
while (i < nbr_of_philos)
{
- printf("Philo %d\n", i);
+ result = pthread_create(&(philos[i].thread), NULL, (void*) process_philo, &philos[i]);
+ if (result != 0)
+ break;
i++;
}
+ while (i--)
+ {
+ pthread_join(philos[i].thread, &retval);
+ if (retval == NULL)
+ result = ft_err(ERR_MALLOC);
+ else if (*(int *)retval != EXIT_SUCCESS)
+ {
+ result = *(int *)retval;
+ free(retval);
+ }
+ }
+ return (result);
}