像这样。

struct some_struct
{
 // Other fields
 .....
 __thread int tl;
}

我正在尝试这样做,但是编译器给了我这个错误。
./cv.h:16:2: error: '__thread' is only allowed on variable declarations
        __thread int tl;

最佳答案

在C和C++中,线程局部存储适用于静态变量或仅适用于具有外部链接的变量。

局部(自动)变量通常在堆栈上创建,因此特定于执行代码的线程,但是全局和静态变量在所有线程之间共享,因为它们位于数据或BSS段中。 TLS提供了一种使这些全局变量在线程本地的机制,这就是__thread关键字所实现的-它指示编译器在每个线程中创建变量的单独拷贝,而按词法保留全局或静态变量(例如,它可以可以由在同一执行线程中调用的不同函数访问)。

非静态类成员和结构成员放置在分配对象(类或结构)的位置-如果声明了自动变量,则在堆栈上;如果使用newmalloc(),则在堆上。无论哪种方式,每个线程都会为该变量接收一个唯一的存储位置,并且__thread仅在这种情况下不适用,因此会出现编译器错误。

10-07 16:12
查看更多