gpt4 book ai didi

c++ - 加入线程如何影响主线程中的执行顺序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:37 24 4
gpt4 key购买 nike

我知道线程是并发运行的,所以你无法预测执行顺序,但在提供的代码中,我在运行其他任何东西之前加入了线程 t4。如果 .join() 应该等到线程完成执行,那么为什么顺序仍然是随机的?在两个 print 语句之前加入任何内容总是会导致它们最后打印,而如果我在之后加入所有内容,它并不总是最后,为什么?

void task() {
std::cout << "task 1 says Hi\n";
}
void task2() {
std::cout << "task 2 says Hi\n";
}
void task3() {
std::cout << "task 3 says Hi\n";
}
void task4() {
std::cout << "task 4 says Hi\n";
}
int main() {
std::thread t1(task);
std::thread t2(task2);
std::thread t3(task3);
std::thread t4(task4);

t4.join();
std::cout << "main says Hi 1\n";
// synchronize - IMPORTANT!
t2.join();
t3.join();
t1.join();
std::cout << "main says Hi 2" << std::endl;
system("pause");
}

最佳答案

std::thread::join只阻塞当前线程,直到 *this 标识的线程完成执行。

所以这向您保证 main says Hi 1 不会在 task 4 says Himain says Hi 2 之前打印在其他三个任务完成执行之前不会打印。

四个任务中的printf语句可以任意顺序打印,不同线程的输出也可能交错。

关于c++ - 加入线程如何影响主线程中的执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com