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

标签 c++ multithreading simultaneous

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

相关文章:

Java 并发性 -_- 在线程之间共享变量时的可见性/重新排序

audio - 在 C# 中以编程方式同时播放多个音频文件的好工具是什么

c++ - C/C++ 中的无限循环

c++ - 如何从qmake中的包含路径中删除项目的根目录

c++ - KeyboardProc 返回 TRUE 会导致性能下降

java swing - 如何一次重新绘制所有组件,以便用户不会注意到它们被一一填充?

php - 防止同时访问数据库表行

c++ - 如何跨 DLL 边界跟踪内存

c# - 线程和垃圾收集

linux - Elasticsearch 线程的行为彼此不同