ami*_*min 6 c++ multithreading c++11
在执行方面,下面两个陈述有什么区别?
async([]() { ... });
Run Code Online (Sandbox Code Playgroud)
thread([]() { ... }).detach();
Run Code Online (Sandbox Code Playgroud)
Fil*_*efp 15
std::async ([]() { ... }); // (1)
std::thread ([]() { ... }).detach (); // (2)
Run Code Online (Sandbox Code Playgroud)
通常在std::async
讨论的时候,首先要注意的是它已经被破坏了,这个名字意味着当返回的值不被接受时(在当前范围的末尾被分配给要被破坏的变量),这些东西不能保留.
在这种情况下,破碎的std::async
是到底是怎么回事导致之间的巨大差异(1)
和(2)
; 一个会阻止,另一个不会.
为什么std::async
在这种背景下阻止?
的返回值的std::async
是一个std::future
其中有一个阻挡析构函数代码继续之前必须执行.
在一个例子中,因为下面的g
内容f
在完成之前不会执行,只是因为(3)
在相关语句中完成所有工作之前,不能销毁未使用的返回值.
std::async (f); // (3)
std::async (g); // (4)
Run Code Online (Sandbox Code Playgroud)
目的是std::thread (...).detach ()
什么?
脱离std::thread
我们只是说; "我不再关心这个线程句柄,请执行该死的东西."
继续一个类似于前一个(关于std::async
)的例子,差异非常明显; 双方f
并g
会同时执行.
std::thread (f).detach ();
std::thread (g).detach ();
Run Code Online (Sandbox Code Playgroud)