如何在c++中初始化线程局部变量
How to initialize thread local variable in c++?
可能重复:
gcc中的C++11 thread_local-备选方案
有没有任何方法可以使用GCC';s __线程?
我想使用c++11 thread_local
来创建和使用thread_local变量,但由于gcc还不支持它,我使用的是gcc特定的__thread
。我声明变量的方式是
myClass
{
public:
static __thread int64_t m_minInt;
};
__thread int64_t myClass::m_minInt = 100;
当我编译它时,我会得到一个类似的错误
error: ‘myClass::minInt’ is thread-local and so cannot be dynamically initialized
如何正确地做到这一点?
PS:gcc版本:4.6.3
您需要使用惰性初始化。
myClass
{
public:
static __thread int64_t m_minInt;
static __thread bool m_minIntInitialized;
static int64_t getMinInt();
};
__thread int64_t myClass::m_minInt;
__thread bool myClass::m_minIntInitialized;
int64_t myClass::getMinInt()
{
if (!m_minIntInitialized) // note - this is (due to __thread) threadsafe
{
m_minIntInitialized = true;
m_minInt = 100;
}
return m_minInt;
}
保证CCD_ 3为零。
在大多数情况下(ELF规范),它被放在.tbss部分,该部分初始化为零。
对于C++http://en.cppreference.com/w/cpp/language/initialization
对于所有其他非本地静态和线程本地变量,零进行初始化。在实践中被初始化为零的被放置在程序的.bss段中映像,它在磁盘上不占用空间,并且被操作系统清零当加载程序时。
相关文章:
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 如何初始化大线程本地对象?
- 开始多线程代码之前的初始化
- 如何在堆上初始化线程?(使用 "new" 关键字)
- 线程局部变量的初始化顺序
- C++:用IIFE线程初始化静态局部变量安全吗
- 设置 JVM 通过 JNI 初始化时创建的线程数
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- VC++6 线程安全静态初始化
- 初始化线程的正确方法
- 无法初始化线程矢量
- 如何使用win32从多线程上下文初始化线程基元
- 如何在c++中初始化线程局部变量
- 如何在 C++11 中的函数内初始化线程安全静态常量向量
- 全局静态初始化线程
- Visual Studio 2012中的std::atomic_flag静态初始化线程是否安全
- 我们如何在不杀死线程的情况下重新初始化线程
- 在VS2015中c++局部静态变量初始化线程安全吗?
- C++11:std::thread 在类中执行函数成员,并在构造函数中初始化线程
- 实例化线程而不运行它们