TLSAlloc()Win32
Método 1: cuando se crea cada hilo, el sistema le asigna una matriz de punteros LPVOID (llamada matriz TLS). Esta matriz está oculta desde la perspectiva de la programación en C y no se puede acceder a ella directamente. para pasar algunas funciones de la API de C. Acceso a llamadas. Primero defina algunas variables globales del subproceso DWORD o variables estáticas de función, listas para usarse como variables de índice para que cada subproceso acceda a su propia matriz TLS. Cuando un hilo usa TLS, el primer paso es llamar a la función TlsAlloc() en el hilo para asociar una variable de índice de matriz TLS con una ranura de la matriz TLS del hilo. Por ejemplo, obtenga una variable de índice:
Tenga en cuenta que después de este paso, el hilo actual en realidad accede a la copia en el hilo de la variable de índice de matriz TLS. En otras palabras, aunque diferentes subprocesos parecen estar usando variables de índice de matriz TLS con el mismo nombre, de hecho cada subproceso puede obtener diferentes valores DWORD. La importancia es que cada subproceso que utiliza TLS obtiene una variable estática local del subproceso de tipo DWORD como variable de índice de la matriz TLS. C/C originalmente no tenía un mecanismo para definir directamente variables estáticas locales de subprocesos, por lo que requirió muchos problemas.
El segundo paso es asignar dinámicamente un área de memoria para el hilo actual (usando la llamada a la función LocalAlloc()) y luego colocar el puntero a esta área de memoria en la ranura correspondiente de la matriz TLS (usando Llamada a la función TlsSetValue()).
El tercer paso es que en cualquier función del hilo actual, puede usar la función TlsGetValue() para obtener el puntero al área de memoria en el paso anterior a través de la variable de índice de la matriz TLS, y luego puede pasar al área de memoria de operaciones de lectura y escritura. Esto logra variables que son accesibles en todas partes dentro de este alcance dentro de un hilo.
Finalmente, si las variables estáticas locales del subproceso mencionadas anteriormente ya no son necesarias, esta área de memoria debe liberarse dinámicamente (usando la función LocalFree()) y luego la ranura correspondiente debe descartarse del Matriz TLS (usando la función TlsFree()) ).