0

我正在尝试使用 __thread 说明符来创建线程局部变量。这在以下代码中可以正常工作:

#include <stdio.h>
#include <pthread.h>

static __thread int val;

int main()
{
  val = 10;
}

但是,如果我尝试在类中使用 __thread 说明符,如下所示:

#include <stdio.h>
#include <pthread.h>

class A
{
public:
  A();
  static __thread int val;
};

A::A()
{
  val = 10;
}

int main()
{
  A a;
}

我得到编译器错误:未定义的对 'A::val' 的引用

4

3 回答 3

3

您只声明了静态变量;您还必须在类之外定义它(如果您有多个源文件,则仅在一个源文件中):

int __thread A::val;
于 2012-09-07T15:15:28.600 回答
0

静态变量必须在类声明范围之外定义。像这样:

int A::val;
于 2012-09-07T15:17:26.323 回答
0

你应该像这样定义它:

/\*static\*/ __thread int A::val;

__thread关键字必须在int.

于 2017-08-18T08:37:19.357 回答