从循环中加入线程:最佳实践

时间:2014-03-19 22:18:00

标签: c++ multithreading c++11

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

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

其中i和j是int而field是指向float数组(float *)的指针,我想知道等待线程收敛的最佳做法是什么?

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

感谢。

1 个答案:

答案 0 :(得分:4)

  

我的想法是有一个等待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();