Вот пример использования расширения компилятора __thread
(не было видно выше).Он используется для создания синглтона для каждого потока с именем ServiceLocator.
Так что это (сокращенный) заголовок.Здесь у меня есть локальная переменная потока как член класса.
class ServiceLocator : public ImmutableServiceLocator {
private:
static __thread ServiceLocator* locator;
public:
void ServiceLocator::setAsServiceLocator();
ImmutableServiceLocator& ServiceLocator::getServiceLocator();
};
Затем вы должны поместить объявление локальной переменной потока в вашу реализацию, иначе ваш компоновщик запутается (я не знаюпочему, извините), и вы можете рассматривать локальную переменную потока как статическую:
__thread ServiceLocator* ServiceLocator::locator;
void ServiceLocator::setAsServiceLocator() {
locator = this;
}
ImmutableServiceLocator& ServiceLocator::getServiceLocator() {
return *locator;
}