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 pueden usar los otros subprocesos 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 al menos 64 para todos los sistemas. El número máximo de índices por proceso es 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, vea Using Thread Local Storage.

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

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 los 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 Using Thread Local Storage in a Dynamic Link Library.

Subproceso local Storage (Visual C++)

Uso del almacenamiento local de subprocesos

Uso de subprocesos Storage en una biblioteca de vínculos dinámicos