并发对象破坏

时间:2014-07-06 11:32:42

标签: c++ destructor language-lawyer

我对sec有误解。 3.6.3 / 1 N3797。当我考虑初始化规则时,我遇到了复制初始化概念。

  

如果构造函数完成   或具有静态存储持续时间的对象的动态初始化   在另一个之前排序,完成了析构函数   第二个是在启动析构函数之前排序的   第一。 [注意:此定义允许并发销毁。 - 结束   注意]

第二个和第一个的完成析构函数是否可能在不同的线程中?

1 个答案:

答案 0 :(得分:1)

注意:我编辑并更正了有关未经测试的初始化的声明(感谢@dyp)。如果你的程序没有启动任何线程,那么所有的初始化都会发生在一些(可能是不确定的)序列中。


除了标准 1 中描述的约束之外,没有任何约束,线程在这些约束下执行具有静态存储持续时间的对象的初始化和销毁​​。特别是,不同翻译单元中对象的初始化相对于彼此不确定地排序(参见[basic.start.init] / 2),如果程序启动线程则未排序

因此,如果TU中的第一个函数调用发生在除主线程之外的另一个线程内,则初始化可能在多个线程中同时发生。标准所说的是那些初始化 排序的对象(例如同一个TU中的对象)也会以确定的兼容顺序销毁。

<子>的 ______________
1)&#34;超出所说的,没有任何说法&#34; - 有点像重言式,但值得一提的是