almacenamiento local de subprocesos se aplica a las variables estáticas solamente. No tiene sentido hacer que la estructura no estática o los miembros de la clase se vuelvan locales.
Las variables locales (automáticos) son siempre específicos para el subproceso que ejecuta el código, pero las variables globales y estáticas son compartidos entre los hilos, ya que residen en el segmento de datos o BSS. TLS proporciona un mecanismo para hacer esas variables globales local al hilo y eso es lo que logra la palabra clave __thread
- que indica al compilador para crear una copia separada de la variable en cada hilo, mientras léxico sigue siendo un problema mundial (por ejemplo, se puede acceder por diferentes funciones llamadas dentro del mismo hilo de ejecución).
miembros de la clase no estáticos y miembros de la estructura se colocan en el mismo lugar donde se asigna el objeto (clase o estructura) - o bien en la pila si se declara una variable automática o en el montón si se utiliza new
o malloc()
. De cualquier forma, cada subproceso recibe una ubicación de almacenamiento única para la variable y __thread
simplemente no es aplicable en este caso, de ahí el error del compilador que obtiene.
Por favor, después del error del compilador que está recibiendo. –
AFAICS '__thread' no es estándar. ¿Qué compilador estás usando? –