В моей программе много циклов, которые можно легко переписать в многопоточность. В основном, для каждой функции, которая должна быть 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', хотя, чтобы увидеть, нужно ли какой-либо из потоков выполнять дополнительную работу. –