CUESTIÓN
He hecho el programa, y hay algunos hilos que
simplemente no imprimen nada. ¿Qué puede
estar pasando?
SOLUCIÓN
Supongamos que, al hacer la práctica, habéis creado dos hilos
adicionales al que ya de por sí nace con el proceso para ejecutar
la función main
: hiloA
e hiloB
.
El hiloA
tendrá más
prioridad e imprimirá los '+'. El hiloB
tendrá menos prioridad e
imprimirá los '-'. El código de vuestra práctica
puede quedar así:
int main(void)
{
...
CreateThread(hiloA);
CreateThread(hiloB);
...
// Establecemos las prioridades de los hilos.
...
// Yo, el hilo principal, el que ejecuto el main, pongo los '0'
for (int i=0; i<...; i++) {printf("0"); fflush(stdout);}
}
Si ocurre, como no es extraño que ocurra, que el hilo principal
acabe antes de que alguno de los otros haya recibido la CPU para
escribir sus caracteres, nunca los escribirán. La razón es que al
llegar al final de la función main
, se retorna de ella y
se invoca de un modo implícito la función
ExitProcess()
.
Esto tiene como consecuencia que se acaba precipitadamente con todo
el proceso, incluidos los hilos que aún no han terminado.
Como solución temporal, podéis hacer
una pequeña chapucilla. Dejad
que el hilo principal duerma unos segundos antes de acabar. En la
próxima sesión veremos
cómo hacer que un hilo espere por la muerte
de otros sin consumir CPU, que es la manera correcta de solucionar
este problema.
© 2003 Guillermo González Talaván.