У меня есть n
количество заданий, между которыми нет общего ресурса, и m
тем. Я хочу эффективно делить количество заданий в потоках таким образом, чтобы не было простаивающего потока, пока все не обработано?Разделительная работа между фиксированным числом потоков с pthread
Это прототип моей программы:
class Job {
//constructor and other stuff
//...
public: doWork();
};
struct JobParams{
int threadId;
Job job;
};
void* doWorksOnThread(void* job) {
JobParams* j = // cast argument
cout << "Thread #" << j->threadId << " started" << endl;
j->job->doWork();
return (void*)0;
}
Тогда в моем главном файле у меня есть что-то вроде:
int main() {
vector<Job> jobs; // lets say it has 17 jobs
int numThreads = 4;
pthread_t* threads = new pthread_t[numThreads];
JobParams* jps = new JubParams[jobs.size()];
for(int i = 0; i < jobs.size(); i++) {
jps[i]->job = jobs[i];
}
for(int i = 0; i < numThread; i++) {
pthread_create(&t[i], null, doWorkOnThread, &jps[0])
}
//another for loop and call join on 4 threads...
return 0;
}
как я могу эффективно убедиться, что нет простоя нити, пока все рабочие места завершены?
Почему вы используете pthreads вместо 'std :: thread'? Почему вы создаете массив с 'new' вместо использования' std :: vector'? Вы делаете код более сложным, чем необходимо. –