2011-08-04 20 views
12

Cuando se realiza un subproceso de grupo de subprocesos, ¿se restablecen cosas como Nombre o datos locales de subprocesos? Entonces, cuando el hilo sale de la piscina la próxima vez, es como nuevo?¿El subproceso .NET ThreadPool se restablece cuando vuelve al grupo?

¿Existe una documentación "oficial" sobre este aspecto de los hilos de ThreadPool?

+1

posible duplicado de [Uso de extensiones paralelas con el atributo ThreadStatic. ¿Podría perder memoria?] (Http://stackoverflow.com/questions/3029449/using-parallel-extensions-with-threadstatic-attribute-could-it-leak-memory) –

Respuesta

8

NO borra el almacenamiento local de la secuencia cuando se lanza, que es el aspecto más importante a tener en cuenta.

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

Cuando el grupo de subprocesos vuelve a utilizar un hilo, no borra los datos en hilo de almacenamiento local o en campos que están marcados con el atributo ThreadStaticAttribute. Por lo tanto, los datos que se colocan en el almacenamiento local de subprocesos mediante un método se pueden exponer a cualquier otro método que se ejecute con el mismo subproceso de grupo de subprocesos. Un método que acceda a un campo que está marcado con el atributo ThreadStaticAttribute podría encontrarse con datos diferentes según el hilo que lo ejecute.

Esto es algo a tener mucho cuidado con ...

+0

Gracias por el enlace a msdn. Por supuesto, cuando miré la versión 2.0 ese bloque de información faltaba. –

3

La respuesta es no, no se restablecerá. Sin embargo, no debe confiar en este hecho porque depende del grupo de subprocesos si su siguiente elemento de trabajo se ejecutará en un nuevo subproceso o en el subproceso reutilizado. Entonces puede que veas o no volver a enhebrar el almacenamiento local. No recomendaría utilizar Thread Local Storage en el grupo de subprocesos por este motivo. La implementación del conjunto de subprocesos es un detalle interno y está sujeta a cambios.

La metáfora del mundo real sería un autobús que llevas al trabajo todos los días. Digamos que por alguna razón quieres dejar tu maleta en el autobús porque sabes que no será robada. Esta es una mala idea porque la próxima vez que suba al autobús no podrá encontrar su bolso. Simplemente porque puede ser un autobús diferente. El depósito de autobuses puede rotar los autobuses entre líneas o puede disponer de autobuses más antiguos. Al igual que el grupo de hilos, puede reutilizar o retirar hilos sin avisarle.

Cuestiones relacionadas