gpt4 book ai didi

c++ - 使用 在 C++ 中并发线程

转载 作者:太空狗 更新时间:2023-10-29 23:30:21 25 4
gpt4 key购买 nike

我一直在环顾四周,我不确定为什么会这样。我看过很多与在 Linux 上使用线程相关的 Tuts,但我现在分享的内容并不多。

代码:

int j = 0;
while(j <= 10)
{
myThreads[j] = std::thread(task, j);
myThreads[j].join();
j+=1;
}

所以我只是想创建 10 个线程并全部执行它们。任务非常简单,处理得很好,但问题是不是所有线程都在执行。

它只执行 1 个线程,它正在等待它完成然后执行另一个线程等等...

PS:我知道 main 函数会在激活这些线程后退出,但我读到了这个,我相信我可以通过多种方式修复它。

所以我想同时执行所有这些线程。

非常感谢,马里奥艾达。

最佳答案

您正在启动线程,然后立即加入它们。您需要创建、完成您的工作,然后才加入其他循环。此外,您通常将线程放在一个 vector 中,以便您可以引用/加入它们(您似乎正在这样做,尽管在一个数组中,因为它被标记为 C++,我鼓励您使用 std::vector 代替)。

该策略与之前的 pthreads 相同:声明一个线程数组,插入它们运行,然后加入。

以下代码来自here .

#include <thread>
#include <iostream>
#include <vector>

void hello(){
std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl;
}

int main(){
std::vector<std::thread> threads;

for(int i = 0; i < 5; ++i){
threads.push_back(std::thread(hello));
}

for(auto& thread : threads){
thread.join();
}

return 0;
}

关于c++ - 使用 <thread> 在 C++ 中并发线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24220778/

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