Итак, у меня есть программа, которая выполняет эти вычисления с числами.Программа имеет многопоточность, а количество потоков задается пользователем.
Я приведу близкий пример
static void *program_thread(void *thread)
{
bool somevar = true;
if(somevar)
{
work = getwork();
}
dowork(work);
if(condition1 blah blah)
somevar = false; /* disable getwork */
if(condition2)
somevar = true; /* condition was either met or not met, so we request
new work either way */
}
Затем с помощью pthreads (и я пропущу некоторый код) я делаю
int main(blah)
{
if (pthread_create(&thr->pth, NULL, program_thread, thread_number)) {
printf("%s","program thread create failed");
return 1;
}
}
Теперь я начну объяснять.Количество создаваемых потоков задается пользователем, поэтому я делаю цикл for и создаю столько потоков, сколько мне нужно.Каждый поток вызывает
work = getwork();
Таким образом, получая независимую работу, однако ЦП работает медленно для такой работы.Он пытается что-то вычислить, пробуя 2 ^ 32 числа (то есть от 1 до 4 294 967 296)
Но мой процессор может делать только около 3 миллионов чисел в секунду, и к тому времени он достигает 4 миллиардов чисел, он перезапущен (для новой работы).
Поэтому я подумал о лучшем методе.Вместо того, чтобы каждый поток получал совершенно разную работу, все потоки должны получать одинаковую работу и разделить числа, которые им нужно попробовать.
Проблема в том, что я не могу контролировать, какую работуон получает, поэтому я должен получить
work = getwork();
перед началом потоков.Вопрос в том, КАК?Использование pthread_create очевидно ... но что потом?