2011-08-12 14 views
14

Leí que había una nueva palabra clave en C++: es __thread por lo que he leído.Usando __thread en C++ 0x

Todo lo que sé es que es una palabra clave que se utilizará como la palabra clave static, pero no sé nada más. Sólo significa que esta palabra clave, por ejemplo, si una variable se declara así:

__thread int foo; 

entonces nada que ver con esa variable será ejecutado con un nuevo hilo?

+0

¿Dónde lo leíste? –

Respuesta

21

Es thread_local, no __thread. Se usa para definir variables que tienen la duración de almacenamiento del hilo.

thread_local es un nuevo especificador de duración de almacenamiento agregado en C++ 0x. Hay otra duración de almacenamiento: estática, automática y dinámica.

De this link:

hilo local de duración de almacenamiento (característica C++ 11). La variable se asigna cuando el hilo comienza y se desasigna cuando termina el hilo. Cada hilo tiene su propia instancia de la variable. Solo las variables declaradas thread_local tienen esta duración de almacenamiento.


creo que la introducción de esta palabra clave fue posible gracias a la introducción de un modelo de memoria estándar en C++ 0x:

+0

whoa, la respuesta se ve completamente diferente a como lo hizo hace 3 minutos. –

+0

@Mooing: Ahora sí. – Nawaz

+0

"' thread_local' es un nuevo especificador de duración de almacenamiento agregado en C++ 03 ": ¿Qué tontería es esta ?! –

5

La palabra clave se llama thread_local. Significa que cada hilo tiene su propia versión de esa variable.

2

No, no significa que "cualquier cosa que tenga que ver con esa variable se ejecutará con un nuevo hilo". Significa que habrá una copia de la variable para cada hilo que existe, y cada hilo solo puede ver su propia copia de la variable.

+1

No hay una palabra clave llamada '__thread' en C++ 0x/11. –

19

De the Wikipedia article on "Thread-local storage":

almacenamiento local de subprocesos (TLS) es un método de programación informática que utiliza memoria estática o global local a un hilo.

Esto a veces es necesario porque normalmente todos los hilos en un proceso comparten el mismo espacio de direcciones, lo que a veces es indeseable.

Y:

C++ 0x introduce la palabra clave thread_local.Aparte de eso, diversas C++ implementaciones del compilador ofrecen formas específicas para declarar subproceso local variables:

Sun Studio C/C++, IBM XL C/C++, C de GNU e Intel C/C++ (sistemas Linux) utiliza la sintaxis:

__thread int number; 

Visual C++, ++ (sistemas Windows) Intel C/C, Borland C++ Builder y digital Marte C++ utilizar la sintaxis:

__declspec(thread) int number; 

Borland C++ Builder también es compatible con la sintaxis:

int __thread number; 

Así, mientras __threadhace existen en la práctica y en algunos sistemas, thread_local es el nuevo, funcionario, palabra clave C++ 0x que hace lo mismo.

Prefiera a no estándar __thread siempre que tenga acceso a C++ 0x.