我看到:http://gcc.gnu.org/projects/cxx0x.html,在gcc中,thread_local关键字目前还不支持。
有没有其他替代方法?我不想使用boost库。
我看到:http://gcc.gnu.org/projects/cxx0x.html,在gcc中,thread_local关键字目前还不支持。
有没有其他替代方法?我不想使用boost库。
gcc编译器有一个存储类__thread
,可能已经足够接近。
http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Thread-Local.html
__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;
}