And*_*zos 1 c++ multithreading thread-safety c++11 c++14
请考虑以下代码:
void h(M m2)
{
...
}
int main()
{
while (true) {
M m1 = ...;
std::thread t(h, std::move(m1));
t.detach();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以保证-d从之前构造的m2正确被销毁?还是有种族?movem1m1
我觉得这个标准很明确:
效果:构造一个线程类型的对象。新的执行线程将在构造线程中
INVOKE (DECAY_COPY ( std::forward<F>(f)), DECAY_COPY (std::forward<Args>(args))...)对DECAY_COPY要评估的调用 执行。
由于复制是在调用线程中完成的,因此必须在构造函数调用返回之前完成复制。
的构造m2是从其他对象(DECAY_COPY的结果)完成的,而不是从进行的m1,因此是否m1已销毁无关紧要。
DECAY_COPY的结果必须由实现存储在某个位置,以便在目标函数初始化之前,它不会超出范围,但这是实现正确的工作。的销毁对其m1没有任何影响。