以下代碼來自Dash
的示例,用於std::thread
。C++線程:什麼連接完成?
#include <iostream>
#include <thread>
#include <chrono>
void foo()
{
// simulate expensive operation
std::this_thread::sleep_for(std::chrono::seconds(1));
}
void bar()
{
// simulate expensive operation
std::this_thread::sleep_for(std::chrono::seconds(1));
}
int main()
{
std::cout << "starting first helper...\n";
std::thread helper1(foo);
std::cout << "starting second helper...\n";
std::thread helper2(bar);
std::cout << "waiting for helpers to finish..." << std::endl;
helper1.join();
// std::cout << "after join... \n";
helper2.join();
std::cout << "done!\n";
}
加入阻塞當前線程,直到被*此完成它的執行所標識的線程。
join
調用後線程執行嗎?
如果我之後添加std::cout << "after join... \n"
第一個加入,after join...
和done!
將輸出連續,無延遲,這就像被後第二join
放。
具體來說,整個效果是:先後連續打印前三行,然後休眠一段時間,最後連續打印最後兩行,沒有延遲。
a.join();
b.join();
cout << "something...";
// or
a.join();
cout << "something...";
b.join();
讓我困惑的是:爲什麼兩種方式有相同的效果? join
究竟做了什麼?
http://www.cplusplus.com/reference/thread/thread/join/ –