thread
Específicos de Microsoft
Subproceso extendidas clase de almacenamiento que se utiliza el modificador para declarar una variable local de subproceso.
__declspec( thread ) declarator
Comentarios
El almacenamiento (TLS) local de subprocesos es el mecanismo por el que cada subproceso de un proceso multiproceso asigna el almacenamiento de los datos específicos del subproceso.En programas multiproceso estándar, los datos se comparte entre todos los subprocesos de un proceso determinado, mientras que el almacenamiento local de subprocesos es el mecanismo para asignar datos de cada subproceso.Para obtener una explicación completa de subprocesos, vea Multithreading.
Las declaraciones de variables locales de subproceso deben utilizar sintaxis de atributo extendido y la palabra clave de __declspec con la palabra clave de Subproceso .Por ejemplo, el código siguiente declara una variable local de subproceso de entero y la inicializa con un valor:
__declspec( thread ) int tls_i = 1;
Observará estas instrucciones al declarar el subproceso los objetos y variables locales:
Puede aplicar el atributo de Subproceso sólo a las declaraciones y definiciones de datos, y las clases que no tienen funciones miembro; Subproceso no se puede utilizar en declaraciones o definiciones de función.
El uso del atributo de Subproceso puede interferir con carga retrasada imports**.**de DLL
Puede especificar el atributo de Subproceso sólo en elementos de datos con la duración del almacenamiento estático.esto incluye objetos de datos globales ( Estática y extern), objetos estáticos locales, y a los miembros de datos estáticos de clases.No se puede declarar objetos de datos automáticos con el atributo de Subproceso .
Debe utilizar el atributo de Subproceso para la declaración y la definición de un objeto local de subproceso, si la declaración y la definición aparecen en el mismo archivo o archivos independientes.
No puede utilizar el atributo de Subproceso como modificador de tipo.
Sólo clases de POD se pueden crear instancias mediante __declspec (subproceso).Se omite el atributo thread si no se declara ningún objeto como parte de la declaración de clase.Por ejemplo:
// declspec_thread.cpp // compile with: /LD __declspec(thread) class X { public: int I; } x; // x is a thread object X y; // y is not a thread object
Como la declaración de objetos que utilizan el atributo de Subproceso se permite, estos dos ejemplos son semánticamente equivalentes:
// declspec_thread_2.cpp // compile with: /LD __declspec( thread ) class B { public: int data; } BObject; // BObject declared thread local. class B2 { public: int data; }; __declspec( thread ) B2 BObject2; // BObject2 declared thread local.
C estándar permite la inicialización de un objeto o variable con una expresión que contenga una referencia a sí misma, pero solo para los objetos de extensión no estáticos.Aunque C++ permite normalmente esa inicialización dinámica de un objeto con una expresión que contenga una referencia a sí mismo, no permiten a este tipo de inicialización con objetos locales de subproceso.Por ejemplo:
// declspec_thread_3.cpp // compile with: /LD #define Thread __declspec( thread ) int j = j; // Okay in C++; C error Thread int tls_i = sizeof( tls_i ); // Okay in C and C++
Observe que una expresión de sizeof que incluye el objeto que se está inicializando no constituye una referencia a sí misma y se permite en C y C++.
Específico de Microsoft de FINAL