pyt*_*nic 22 c c++ multithreading thread-local
像这样.
struct some_struct
{
// Other fields
.....
__thread int tl;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试这样做,但编译器给了我这个错误.
./cv.h:16:2: error: '__thread' is only allowed on variable declarations
__thread int tl;
Run Code Online (Sandbox Code Playgroud)
Hri*_*iev 15
线程局部存储仅适用于静态变量.将非静态结构或类成员线程局部化是没有意义的.
本地(自动)变量始终特定于执行代码的线程,但全局和静态变量在线程之间共享,因为它们驻留在数据或BSS段中.TLS提供了一种机制,使这些全局变量成为线程的本地变量,这就是__thread关键字实现的目的 - 它指示编译器在每个线程中创建变量的单独副本,而词法上它仍然是全局变量(例如,它可以通过不同的方式访问)在同一执行线程内调用的函数).
非静态类成员和结构成员放置在分配对象(类或结构)的相同位置 - 如果声明了自动变量,则在堆栈中,或者在堆中使用new或malloc()使用.无论哪种方式,每个线程都会收到变量的唯一存储位置,并且__thread在这种情况下不适用,因此会出现编译器错误.
C11 标准第 6.7.1 节第 2 段
声明中的声明说明符中最多可以给出一个存储类说明符,但 _Thread_local 可以与 static 或 extern 一起出现。120)
C11 标准第 6.7.1 节第 3 段
在具有块作用域的对象的声明中,如果声明说明符包含 _Thread_local,则它们还应包含 static 或 extern。如果 _Thread_local 出现在对象的任何声明中,则它应出现在该对象的每个声明中。
| 归档时间: |
|
| 查看次数: |
20716 次 |
| 最近记录: |