【发布时间】:2017-02-18 10:33:35
【问题描述】:
我有n 个作业,它们之间没有共享资源,还有mthreads。我想有效地划分线程中的作业数量,以便在处理完所有内容之前没有空闲线程?
这是我的程序的原型:
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?你让你的代码比必要的复杂。
标签: c++ multithreading pthreads