以下代码来自于Dash的
令我困惑的是:为什么这两种方式有相同的效果?
std::thread
示例。#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函数会阻塞当前线程直到标识为*this的线程执行结束。
join
调用后,线程是否会执行?
如果我在第一个join
后面添加std::cout << "after join... \n"
,则after join...
和done!
将按顺序连续输出,没有延迟,就像它们被放置在第二个join
之后一样。
具体来说,整个效果是:先连续打印前三行,然后睡眠一段时间,最后再连续打印后两行而没有延迟。
a.join();
b.join();
cout << "something...";
// or
a.join();
cout << "something...";
b.join();
令我困惑的是:为什么这两种方式有相同的效果?
join
到底是做了什么呢?该函数与将一个数组转换为字符串。只需传入一个参数,即可指定用于连接每个数组元素的字符。