在我的程序中有很多循环可以很容易地重写成多线程。基本上应为其multithreadd我写下面的函数每个函数:多线程封装器
void func_to_threaded(int i_from, int i_to, int num_th, ...other_parameters)
{
int i_min = i_from;
int i_max = i_to;
int i_inc = i_max/num_th;
i_max = i_max % num_th + i_inc;
thread* th_dens = new thread[num_th];
for (int i = 0; i < num_th; i++)
{
th_dens[i] = thread(func_one_thread, i_min, i_max, ...other_parameters);
i_min = i_max;
i_max += i_inc;
}
for (int i = 0; i < num_th; i++) th_dens[i].join();
delete[] th_dens;
}
有没有办法改写这个是通用表单的各项功能
void func_one_thread(int i_min, int i_max, ...other_parameters)
只是要去说,该功能看起来并不像它拆分工作均匀,除非'i_from'始终为0。试了精神上做的时候用'(3,8, 2,...)',并以'thread(func_one_thread,3,4,...)'和'thread(func_one_thread,4,8,...)'结束。所以,除非我错过了一些东西,否则它可能有点不平衡。 –
是的,在我的代码中'i_from'总是为零,现在我只是试图更一般地重写它,但失败了...... – Michal
啊。不太熟悉自己的多线程,但也许'i_inc =(i_max - i_min)/ num_th;'会工作。但是,您需要检查'i_max - i_min'是否被'num_th'完全整除,以查看是否有任何线程需要做额外的工作。 –