我正在编写一个使用静态方法和属性的程序,以便在main之前获得一些东西。语言是C ++ 11
我的问题是,我什么时候能保证线程局部变量(使用pthread)会存在?即我可以在main开始之前在主线程的静态初始化中安全地设置线程局部变量吗?
答案 0 :(得分:1)
在主要开始之前,我可以在主线程的静态初始化中安全地设置线程局部变量吗?
C ++编程语言,第四版,Bjarne Stroustrup:
12.1.8。局部变量
函数中定义的名称通常称为本地名称。 执行线程时初始化局部变量或常量 达到了它的定义。除非声明为static,否则每次调用 函数有自己的变量副本。如果是局部变量 声明为static,一个静态分配的对象(第6.4.2节)将会 用于在函数的所有调用中表示该变量。的它 只有在执行线程第一次到达时才会初始化 它的定义。例如:......
15.4.1。非局部变量的初始化 ....
非局部(静态分配)变量的初始化是 由实现用于启动a的任何机制控制 C ++程序。 只有在保证此机制才能正常工作 执行main()。
虽然您指的是线程局部变量,但由于您的初始化代码本身显然是全局static
,因此无法保证在main()
之前执行了初始化代码开始运行,所以如果你有静态依赖于其他静力学,你可能会有问题。
但是,main()
执行后,您的所有static
代码都已初始化。如果是这样,您在main()
内引用的静态资源将保证可用。
如果你的线程本地是在静态成员或全局静态的线程变量中声明的,那么必须执行main()
以便初始化静态线程,并且取决于你如何声明你的线程本地,也开始了,这一点线程局部静态将在到达执行点时初始化。