Хорошо, у меня возникла проблема с динамическим распределением работы между потоками в очереди.
Например, в моем коде есть структура, подобная приведенной ниже:
struct calc
{
double num;
double calcVal;
};
Я храню каждую структуру в массиве длины l, как показано ниже.
struct calc **calcArray;
/* then I initialize the calcArray to say length l and
fill each calc struct with a num*/
Теперь, основываясь на num, я хочу найти значение calcVal. Каждый struct calc имеет различное значение для num.
Я хочу создать 4 pthreads, что достаточно просто, но я хочу сделать это в начале,
поток 0 получает calcArray [0]
поток 1 получает calcArray [1]
поток 2 получает calcArray [2]
поток 3 получает calcArray [3]
Теперь, предполагая, что для каждого потока потребуется разное время, чтобы выполнить вычисления для каждого вычисления,
если поток 1 завершится первым, он получит calcArray [4]
затем поток 3 завершает работу и получает calcArray [5] для выполнения
, и это продолжается, пока не достигнет конца calcArray [l].
Я знаю, что мог бы просто разбить массив на l / 4 (каждый поток получает четверть вызовов), но я не хочу этого делать. Вместо этого я хочу сделать работу как очередь. Есть идеи, как это сделать?