2011-06-11 7 views

Respuesta

4

TLS es útil para cosas como la información de contexto de la sesión de usuario que es específica de la secuencia, pero podría usarse en varios métodos no relacionados. En tales situaciones, TLS es más conveniente que pasar la información arriba y abajo de la pila de llamadas.

+0

cuando tengo varias funciones llamadas desde una función de subprocesos y todas usan los mismos datos, entonces utilizo TLS solo para no pasar los datos a través de la pila, ¿sí? –

+1

Sí. Por ejemplo, si se requiere en varios puntos del código para conocer al usuario conectado, es más fácil almacenar esa información en TLS dentro de un singleton en lugar de pasar el usuario conectado a cada método. – btreat

+1

su comprensión es correcta, pero el análisis en la pila es mucho mejor –

1

Thread-local storage se puede usar para emular variables globales o estáticas por subprocesos. Las variables locales "normales" no pueden.

+1

y lo que me da tener una variable global que sea específica del subproceso? –

+0

Puede dar f.e. Lo que mishmashru menciona – str14821

7

Si puede usar variables locales, hágalo e invariablemente puede usar locales. Solo como último recurso, debe usar el almacenamiento local de subprocesos que tiene casi todas las mismas desventajas que las variables globales. Aunque está buscando una razón para usar el almacenamiento local de subprocesos, de hecho, la mejor práctica es buscar formas de evitarlo.

2

Conozco a un muy buen ejemplo de la utilización de TLS. Cuando está implementando LIBC o transfiriendo una de las variantes de LIBC a la nueva plataforma, necesita de alguna manera la variable 'errno' (que en la plataforma de un único subproceso es simplemente extern int errno) para ser única para cada subproceso. Las funciones LIBC simplemente lo almacenan en TLS del hilo actual y una llamada a errno solo lo lee desde TLS. TLS es la manera de hacer que cualquier hilo de biblioteca sea seguro. Usted almacena cualquier tipo de datos 'estáticos' o 'globales' en TLS, por lo que la misma función que se llama desde otro hilo no corromperá sus variables 'estáticas' o 'globales' en otro hilo. Lo que hace que las funciones re ingresen de diferentes hilos.

+0

¡Buen punto hermano! Ni siquiera sabía eso. – str14821

Cuestiones relacionadas