Muchas gracias, de hecho la clase singleton esta protegida por un mutex y
todas las variables compartidas que uso dentro del singleton estan
protegidas por un mutex y una guarda generica que hace un lock y un unlock
al salir de la funciòn.
Saludos
Pablo
2008/4/13, Mauro Ciancio <[EMAIL PROTECTED]>:
>
> 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
>
>
--
Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
de intercambiarlas ambos tenemos dos ideas.
Apoyando a la comunidad Open Source.
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion