n
個のジョブがあり、それらの間に共有リソースはありません。m
スレッドです。私は効率的にスレッドのジョブ数を分割し、すべてが処理されるまでアイドルスレッドがないようにしたいのですか?pthreadで固定数のスレッド間を分割する
これは私のプログラムのプロトタイプです:
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;
}
どのように私は効率的アイドルのスレッドがするまで、すべてがないことを確認することができます。
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;
}
はその後、私のメインのファイルに私のようなものを持っていますジョブは完了しましたか?
なぜ 'std :: thread'の代わりにpthreadsを使用していますか?なぜ 'std :: vector'を使うのではなく、' new'を使って配列を作成していますか?コードを必要以上に複雑にしています。 –