1) ¿Como saber si un thread termino su ejecucion?
habria que ver que pasa con pthread_kill si el thread termino pero
todavia no fue joineado al main... quiza sea una solucion. otra es
llamar a pthread_join y, al retornar, sabes que el thread termino :)
tiene un poco de trampa porque si no termino, _espera_ a que termine.
creo que no existe funcion que devuelva esa informacion (al menos no una
posix). la otra es enviar desde el thread alguna señal, desbloquear un
mutex o setear un flag (variable) pero todas esas son dependientes de tu
clase thread. para el caso particular de la implementacion de taller se
suele usar una variable booleana.
2) ¿Cuando se produce un deadlock indefectible y sistematico entre 2 threads
?
a primera vista me parece que esta secuencia garantiza un deadlock.
faltaria codigo para inicializar los mutex, controlar errores, etc.
thread 1:
while(pthread_mutex_trylock(c) != EBUSY)
pthread_mutex_unlock(c);
pthread_mutex_lock(a);
pthread_mutex_lock(b);
pthread_mutex_lock(c);
thread 2:
pthread_mutex_lock(c);
while (pthread_mutex_trylock(b) != EBUSY)
pthread_mutex_unlock(b);
pthread_mutex_lock(a);
3) ¿Porque la funcion que se pasa por parametro en la creacion del thread es
static?
te falto decir "en c++" y aclarar que la "funcion" es miembro de una
clase :) eso es asi en la implementacion de clase thread de taller
porque el prototipo de la funcion de inicio para un thread es void
*f(void *) por lo cual si pasaras un metodo no estatico tendrias como
primer parametro (oculto) el puntero a la instancia del objeto invocante.
saludos
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion