многопоточность — спецификатор __thread не работает в классе C ++

Я пытаюсь использовать спецификатор __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’

0

Решение

Вы только объявили статическую переменную; Вы также должны определить его вне класса (только в одном исходном файле, если у вас есть несколько исходных файлов):

int __thread A::val;
3

Другие решения

Статические переменные должны быть определены вне области объявления класса. Как это:

int A::val;
0

Вы должны определить это так:

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

__thread Ключевое слово должно быть впереди int,

0
По вопросам рекламы [email protected]