Compartir a través de


Almacenamiento local de subprocesos

Todos los subprocesos de un proceso comparten su espacio de direcciones virtual. Las variables locales de una función son únicas para cada subproceso que ejecuta la función. Sin embargo, todas las subprocesos del proceso comparten las variables estáticas y globales. Con 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 otros 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 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 un ranura TLS en la matriz. Si los datos asociados a un índice caben en un valor de 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 Using Thread Local Storage.

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++)

mediante de almacenamiento local de subprocesos

usar el almacenamiento local de subprocesos en una biblioteca de vínculos dinámicos