我有一个嵌套的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));
作为构造函数,因为我的数组大小是动态的。
感谢。
答案 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();