【发布时间】:2021-12-28 13:39:29
【问题描述】:
int main(){
std::thread t1(findEven, start, end, &(EvenSum));
std::thread t2(findOdd, start, end, &(OddSum));
t1.join();
t2.join();
}
假设 findEven 和 findOdd 是一些已经编写好的函数。 为了更好地理解,这是代码Link to Code
在理解线程概念方面有一些困难并想检查我的理解是否正确? 我的主线程创建了一个新线程 T1 并运行了函数 Evensum 。它没有等待 evensum 完成并返回并再次启动一个新线程 T2 并同时运行 findodd 。现在 t1 和 t2 都在同时运行。没关系。 现在它击中 t1.join () 。是不是说只要t1没有完成就没有到达t2.join()这行?
【问题讨论】:
-
是的。你的理解是正确的。 t2,join 只有在 t1 完成其工作时才会触发。
-
嘿,但为什么会这样呢?我的意思是这样做的逻辑是什么?我想了解这背后的哲学。
-
join就是这样工作的。在调用join的线程完成执行之前,它不允许调用join的线程继续运行。 -
如果您不希望这样,请查看使用
std::async并返回std::future对象。 -
join的全部意义在于“等到线程执行完毕,然后继续”。还有其他工具可用于以不同方式同步线程。不确定它是否有任何哲学,更重要的是,有时能够等到某个线程完成是非常有用的。
标签: c++ multithreading