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.