pthreads + tsd

Aldrin Martoq amartoq en dcc.uchile.cl
Mar Sep 1 15:38:57 CLT 2009


On Tue, 2009-09-01 at 14:50 -0400, Alvaro Herrera wrote:
> Aldrin Martoq escribió:
> > Hmmm... No encuentro la seccion RATIONALE... algun HINT ?
> > $ dpkg --listfiles manpages-posix manpages-posix-dev | grep -i rationa
> > $ 
> man pthread_getspecific
> NAME
>        pthread_getspecific, pthread_setspecific - thread-specific data manage‐
>        ment
> ...
> RATIONALE
>        Performance and ease-of-use of pthread_getspecific() are  critical  for

Bah'... que estupidez de mi parte... gracias!

Volviendo a la pregunta original: Entiendo Eduardo que usas TSD por
temas de rendimiento. Me late que quieres compartir informacion
"estadistica" (contadores y ese tipo de cosas).

Te sugiero que en vez de cada thread actualice un area compartida cada
vez que aumenta un contador; que cada thread haga esta pega solo cuando
sea necesario. Una forma de hacerlo es con signals y pthread_kill() a
cada thread. Luego, cuando quieres obtener la informacion de todos los
threads, el thread "monitor" envia el evento a cada thread
"trabajolico", el cual es interrumpido solo para entrega dicha
informacion (en un area compartida!), y finalmente el thread "monitor"
realiza los calculos de resumen o lo que corresponda.


Ganas respecto a una variable global:
- el area TSD sigue siendo performante la mayor parte del tiempo.

Pierdes respecto a una variable global en:
- si obtener la informacion privada es muy seguido, no creo que sea
buena idea.
- no tendras la informacion al dia o exacta, pero una buena
aproximacion.



-- 
Aldrin Martoq <amartoq en dcc.uchile.cl>
http://aldrin.martoq.cl/



Más información sobre la lista de distribución Linux