在我的程序中有很多循環可以很容易地重寫成多線程。基本上應爲其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'完全整除,以查看是否有任何線程需要做額外的工作。 –