On Mon, May 14, 2007 at 02:20:52AM -0300, Pablo Statile wrote:
>  El tema es que tanto yo, como el resto de la gente, estamos haciendo join() 
> en nuestro desarrollo, 
>  esperando que al final de todo, se libere automaticamente la memoria ( ya 
> que el texto dice" The 
>  target thread is automatically detached after all joined threads have been 
> woken up.").
>  Por lo que lei en internet, el problema esta en que valgrind te avisa que 
> posiblemente este 
>  perdiendose memoria, pero no es asi, ya que luego, la memoria se esta 
> liberando.
> 
>  Por lo que vi, no hay una funcion directa que libere la memoria, y se pueda 
> usar conjuntamente con 
>  el join().

No se muy bien a que te referis aca, si es a lo que tira el valgrind que
mandaste en el otro mail u a otra cosa.

Una forma normal de terminar un thread es que desde dentro del thread se
llame a pthread_exit(), o la funcion principal del thread haga un
return. Eso libera los recursos internos asociados con el thread.
Despues en algun momento el thread principal hace un pthread_join()
sobre el que murio, y por ultimo haces un free() de tu pthread_t.

O sea, el ciclo de vida seria algo asi:


Thread principal                Thread hijo
----------------------------------------------------------------

pthread_t pd = malloc();
pthread_create(pd, func);

...                             [ejecucion de func]
                                ...
                                return o pthread_exit()
                                [el thread muere]
...
pthread_join(pd);
free(pd);


Me explico?


Gracias,
                Alberto


_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a