在某些时候,我记得读到直到main()的第一行才能安全地创建线程,因为编译器会插入特殊的代码来在静态初始化时间内运行线程工作。所以如果你有一个全局对象在构建时创建一个线程,你的程序可能会崩溃。但是现在我找不到原文,我很好奇这个限制有多严格 - 这是标准严格遵守的吗?在大多数编译器上它是真的吗?它会在C++ 0x中保持真实吗?一个符合标准的编译器是否有可能自己创建静态初始化程序多线程? (例如,检测到两个全局对象不相互接触,并在单独的线程上初始化它们以加速程序启动)在静态初始化期间可以安全地创建线程吗?
编辑:为了澄清,我试图至少了解实现是否真的显着不同在这方面,或者如果这是伪标准的东西。例如,在技术上,该标准允许对属于不同访问说明符(public/protected /等)的成员进行混洗。但没有编译器我知道实际上是否这样做。
“这是严格按照标准真正的” - C++ 03标准对于线程主题没有什么可说的。当前行为所关注的地方是POSIX(它当然是* a *标准,而不是*标准),MSDN,Boost或其他针对编译器,平台和线程API的特定于实现的文档使用。 – 2009-09-18 15:25:31