我一直在环顾四周,我不确定为什么会这样。我看过很多与在 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/