什么时候pthread线程变量在静态初始化期间开始存在?

时间:2014-10-04 17:14:20

标签: c++ thread-safety pthreads

我正在编写一个使用静态方法和属性的程序,以便在main之前获得一些东西。语言是C ++ 11

我的问题是,我什么时候能保证线程局部变量(使用pthread)会存在?即我可以在main开始之前在主线程的静态初始化中安全地设置线程局部变量吗?

1 个答案:

答案 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()以便初始化静态线程,并且取决于你如何声明你的线程本地,也开始了,这一点线程局部静态将在到达执行点时初始化。