我记得曾经读过一篇文章,说在main()的第一行之前无法安全地创建线程,因为编译器会插入特殊代码以使线程工作正常,并且这些代码在静态初始化期间运行。因此,如果你有一个在构造函数中创建线程的全局对象,你的程序可能会崩溃。但现在我找不到原始文章了,我很想知道这个限制有多强 - 它是否严格符合标准?大多数编译器是否都是这样的?在C++0x中是否仍然如此?符合标准的编译器是否可以使静态初始化本身成为多线程的?(例如,检测到两个全局对象不相互影响,并在单独的线程上初始化它们以加速程序启动)。
编辑:为了澄清,我至少要感觉到实现在这方面是否真的存在显着差异,或者它是否是一种伪标准。例如,从技术上讲,标准允许重新排列属于不同访问说明符(public/protected等)的成员的布局。但我所知道的没有任何编译器这样做。
编辑:为了澄清,我至少要感觉到实现在这方面是否真的存在显着差异,或者它是否是一种伪标准。例如,从技术上讲,标准允许重新排列属于不同访问说明符(public/protected等)的成员的布局。但我所知道的没有任何编译器这样做。