从循环中连接线程:最佳实践

Joining Threads from a loop : best practise

本文关键字:最佳 线程 连接线 循环 连接      更新时间:2023-10-16

我有一个嵌套的for循环,触发线程,看起来像这样;

for SIZE
    for SIZE
        std::thread cellThread ([=]() { solver(i,j, field); return 1; });
WAIT FOR JOIN

其中i和j是int和字段是指向浮点数组(float*)的指针,我想知道最好的做法是等待线程收敛?

我的想法是有一个全局计数器等待SIZE*SIZE,然后继续程序。我看到一个线程数组被使用,只是等待每个线程加入(我将使用std::thread* cellThread = (std::thread*)calloc(size, sizeof(std::thread));作为构造函数,因为我的数组大小是动态的。

谢谢。

我的想法是有一个全局计数器,等待SIZE*SIZE,然后继续程序。

为什么不等待您拥有的每个thread对象呢?

我将使用std::thread* cellThread = (std::thread*)calloc(size, sizeof(std::thread));

我真的希望不是。

这个应该可以工作:

std::vector<std::thread> threads;
threads.reserve(SIZE*SIZE);
for SIZE
    for SIZE
        threads.emplace_back( solver, i, j, field );
for (auto& t : threads)
    t.join();