Я пытаюсь использовать спецификатор __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’
Вы только объявили статическую переменную; Вы также должны определить его вне класса (только в одном исходном файле, если у вас есть несколько исходных файлов):
int __thread A::val;
Статические переменные должны быть определены вне области объявления класса. Как это:
int A::val;
Вы должны определить это так:
/\*static\*/ __thread int A::val;
__thread
Ключевое слово должно быть впереди int
,