std :: thread移动构造函数

时间:2016-09-25 19:04:20

标签: c++ multithreading c++11 move-semantics

我最近查看了这个std::thread参考。

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

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不再是一个主题是什么意思?

1 个答案:

答案 0 :(得分:3)

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

move将表示的线程从一个std::thread移动到另一个move。在t3之后,std::thread是一个无胆的std::threadt3对象仍然存在,但t4不引用任何实际的系统线程。 t3现在代表之前由join代表的主题,但除非您致电var data = '{"email.com":["email@email.com|username\\r"],"email.de":["email@email.de|username"]}'; var obj = JSON.parse(data); var keys = Object.keys(obj); for (i = 0; i < keys.length; i++) { document.getElementById('types').innerHTML += '<br>' + keys[i]; // I want to get email.com , email.de },否则它不会等待。