2016-09-25 204 views
-1

我最近看了这个std::thread参考。std ::线程移动构造函数

对于移动构造函数,它说:

thread(thread&& other); 

移动的构造。构造线程对象来表示由 其他表示的执行线程。 此次调用后其他不再代表 执行的线程。

此外,在下面的例子中有这些行:

int n=0; 
std::thread t3(f2, n); 
std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread 

什么我不明白是什么螺纹t3t4到底会发生? t4是否等到t3完成执行?这是什么意思t3不再是一个线程?

+3

“这个调用后,其他不再代表执行的线程”。 – juanchopanza

+0

那意味着什么?它立即停止执行? –

+1

可能*表示执行线程的C++对象与执行线程* actual *之间存在差异。它类似于'std :: unique_ptr'表示某些内存的潜在所有权,但不是它自己的内存。这是“资源处理”与实际资源。 –

回答

3

std::thread不是线程。它是由一个底层操作系统提供的线程表示,您可以使用它来操作该线程。这就像一个car的对象不是一辆真正的汽车。

move将代表从一个std::thread代表的线程移动到另一个。 move,t3之后是无味的std::threadstd::thread对象仍然存在,但t3没有引用任何实际的系统线程。 t4现在代表之前由t3代表的线程,但它不会等待,除非您致电join

+0

好的!现在有道理,你的第一句话明确表达了。谢谢! –