我读到C ++中有一个新的关键字:它是我读过的__thread
。
我所知道的是它是一个像static
关键字一样使用的关键字,但我什么都不知道。这个关键字是否仅仅意味着,例如,如果变量被声明为:
__thread int foo;
那么与该变量有关的任何内容都将用新线程执行?
答案 0 :(得分:24)
它是thread_local
,而不是__thread
。它用于定义具有线程存储持续时间的变量。
thread_local
是在C ++ 0x中添加的 new 存储持续时间说明符。还有其他存储时间:静态,自动和动态。
来自this link:
线程本地存储持续时间(C ++ 11功能)。线程开始时分配变量,线程结束时分配变量。每个线程都有自己的变量实例。只有声明为thread_local的变量才有此存储持续时间。
我认为通过在C ++ 0x中引入标准化内存模型可以实现这个关键字的引入:
答案 1 :(得分:20)
来自the Wikipedia article on "Thread-local storage":
线程局部存储(TLS)是一种使用的计算机编程方法 线程本地的静态或全局内存。
有时需要这样做,因为通常是进程中的所有线程 共享相同的地址空间,这有时是不可取的。
和
C ++ 0x引入了
thread_local
关键字。除此之外,各种C ++ 编译器实现提供了声明线程局部的特定方法 变量:Sun Studio C / C ++,IBM XL C / C ++,GNU C和Intel C / C ++(Linux系统)使用以下语法:
__thread int number;
Visual C ++,Intel C / C ++(Windows系统),Borland C ++ Builder和Digital Mars C ++使用语法:
__declspec(thread) int number;
Borland C ++ Builder还支持语法:
int __thread number;
因此,虽然__thread
在实践中和某些系统上存在,但thread_local
是新的官方C ++ 0x关键字,它执行相同的操作。< / p>
只要您有权访问C ++ 0x,就更喜欢非__thread
。
答案 2 :(得分:5)
该关键字名为thread_local
。这意味着每个线程都有自己的变量版本。
答案 3 :(得分:2)
不,不意味着“与该变量有关的任何内容都将使用新线程执行”。这意味着存在每个线程的变量副本,每个线程只能看到自己的变量副本。