On 4/13/08, Pablo Martín Viva <[EMAIL PROTECTED]> wrote:
>
> Buenos dias tenia una consulta conceptual sobre hacer un join aun thread,
> lo que yo entendi segun todos los tutoriales y manuales y documentos que
> explican threads es que cuando vos haces un join a un thread el hilo
> principal de ejecucion que invoca al join del thread se queda en espera
> hasta que el thread en cuestion termine su ejecuciòn, no es asi???
Si, cuando llamas a join() el hilo llamante (que puede ser el main) se queda
esperando a que termine ese hilo.
Entonces me surge la siguiente duda, supongamos que yo tengo X cantidad de
> Threads Producers y 1 Thread Consumer y en mi main creo estos X+1 Threads y
> los pongo a correr, inmediatamente luego, hago un join de todos los X
> Threads Producers luego seteo una variable compartida que indica que todos
> los Threads Producers terminaron y luego hago un join del Thread Consumer.
>
> Esto funciona? Es decir cuando yo hago un join de los X Threads Producers
> el hilo principal o el de la funcion main se queda esperando hasta que todos
> los X Threads Producers terminen y luego se setearia la variable de
> compartida que indica que la produccion termino? O puede suceder que la
> variable compartida booleana esa se setee sin que los threads terminen?
Si, funciona. La variable se va a setear luego de que pase por todos los
join(), es decir luego de que se terminen todos los threads. No puede pasar
eso que decís.
El codigo seria algo asi
>
> Thread** listaThreadProducer = new Thread*[5];
> Thread* threadConsumer = new ThreadConsumer("Nombre del archivo);
>
> for (counter = 0; counter < 5; counter++) {
> listaThreadProducer[counter] = new ThreadProducer("nombre del
> archivo");
> listaThreadProducer[counter]->start();
> }
> threadConsumer->start();
>
> for (counter = 0; counter < 5; counter++) {
> ListaThreadProducer[counter]->join();
> }
> SharedResource::getInstance().setProductionFinished(true);
> threadConsumer->join();
>
> // Aca irian todos los delete.
>
> Esto puede funcionar? Es decir si yo en mi consumer thread hago referencia
> a SharedResource::getInstance().getProductionFinished();
Con lo único que tenes que tener cuidado es proteger la variable compartida
con algún mutex.
> Saludos
> Pablo
>
Saludos.
--
Mauro Ciancio
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion