Almacenamiento local para el subproceso

Todos los subprocesos de un proceso comparten su espacio de direcciones virtuales. Las variables locales de una función son únicas para cada subproceso que ejecuta la función. Sin embargo, todos los subprocesos del proceso comparten las variables estáticas y globales. Con el almacenamiento local de subprocesos (TLS), puede proporcionar datos únicos para cada subproceso al que el proceso pueda acceder mediante un índice global. Un subproceso asigna el índice, que los demás subprocesos pueden usar para recuperar los datos únicos asociados al índice.

La constante TLS_MINIMUM_AVAILABLE define el número mínimo de índices TLS disponibles en cada proceso. Se garantiza que este mínimo sea de al menos 64 para todos los sistemas. El número máximo de índices por proceso es de 1088.

Cuando se crean los subprocesos, el sistema asigna una matriz de valores LPVOID para TLS, que se inicializan en NULL. Para poder usar un índice, uno de los subprocesos debe asignarlo. Cada subproceso almacena sus datos para un índice TLS en una ranura TLS de la matriz. Si los datos asociados a un índice caben en un valor LPVOID , puede almacenar los datos directamente en la ranura TLS. Sin embargo, si usa un gran número de índices de esta manera, es mejor asignar almacenamiento independiente, consolidar los datos y minimizar el número de ranuras TLS en uso.

En el diagrama siguiente se muestra cómo funciona TLS. Para obtener un ejemplo de código que ilustra el uso del almacenamiento local de subprocesos, consulte Uso del almacenamiento local de subprocesos.

Diagrama que muestra cómo funciona el proceso de T L S.

El proceso tiene dos subprocesos, Subproceso 1 y Subproceso 2. Asigna dos índices para su uso con TLS, gdwTlsIndex1 y gdwTlsIndex2. Cada subproceso asigna dos bloques de memoria (uno para cada índice) en el que almacenar los datos y almacena los punteros a estos bloques de memoria en las ranuras TLS correspondientes. Para acceder a los datos asociados a un índice, el subproceso recupera el puntero al bloque de memoria de la ranura TLS y lo almacena en la variable local lpvData.

Es ideal usar TLS en una biblioteca de vínculos dinámicos (DLL). Para obtener un ejemplo, vea Uso del almacenamiento local de subprocesos en una biblioteca de vínculos dinámicos.

Almacenamiento local de subprocesos (Visual C++)

Uso del almacenamiento local de subprocesos

Uso del almacenamiento local de subprocesos en una biblioteca de vínculos dinámicos