- ENLACE A LA EXPLICACION DE FUNCIONES y los problemas de los hilos 3 Readmes para disfrutar
- Varios enlaces de interes / fuentes
-
Lo primero que hago es mallocar memoria para cada struct philo que vaya a necesitar (numero de filos )
-
Lo segundo que hago es allocar memoria para cada tenedor(que van a ser mis mutex) y los inicializamos.
-
Por tenemas de legibilad y no tener que escribir cada vez la funcion
pthread_mutex_init
he hecho una funcion wrappeada llamadaaction_mutex_init
.
action_mutex_init(data, PRINT)
- Bucle para inicializar cada struct, lo nuevo aqui aparte de la funcion
pthread_crate
(explicada en los readmes de funciones) es get_time() una funcion que llama a una de las funciones permitidas que es `gettimeofday``
#include <stdio.h>
#include <sys/time.h>
int main()
{
struct timeval tv;
gettimeofday(&tv, NULL);
printf("Seconds since Jan. 1, 1970: %ld\n", tv.tv_sec);
printf("Microseconds: %ld\n", tv.tv_usec);
return (0);
}
Seconds since Jan. 1, 1970: 1711855062
Microseconds: 765366
- Ademas simulo una mesa redonda para garantizar que el tenedor del ultimo filosofo sea el 0 Subir
- Aqui viene la primera decision se podra usar un
pthread_join
y esperar a que todos los hilos terminen, entonces habria que crear un hilo para checkear muertes de filosofos y si en el caso de que te pasen un numero de comidas y todos han comido vaya comprobando o utilizar la funcionpthread_detach
que en mi caso es la opcion ya que no espera a que acaben los hilos y el codigo por debajo se ejecuta a la par he tenido varios problemas de syncro por el camino , pero nada grave mi hermano, al final los hilos se van ejecutando mientras tengo un bonito while(42) comprobando tanto alguna muerte como si todos han comido y tenemos que acabar el programa.