フィットネス関数が何を返すかはわかりませんが、それを "m" 回 (この場合は 100/8、つまり 12 回) 呼び出すラッパー関数を作成することをお勧めします。次に、ラッパー関数を呼び出す新しいスレッドを生成する thread_group::add_thread を呼び出すたびに、「n」回ループするループを作成します。
基本的な考え方は次のようになります。
/* ??? */ fitness_calculation(organism& o){
//...
}
// wrapper function
void calc(std::vector<organism>& v, int idx, int loops){
for(int i = 0; i < loops; i++)
fitness_calculation(v[idx + i]);
}
int main(){
int num_organisms = 100;
std::vector<organism> v(num_organisms); // some array with the organisms
int threads = 8;
boost::thread_group g;
int organisms_per_thread = num_organisms / threads;
int i = 0, idx = 0;
for ( ; i < threads; ++i, idx += organisms_per_thread )
g.add_thread(calc, v, idx, organisms_per_thread);
// finish up remainder in this thread
calc(v, idx, num_organisms % threads);
g.join_all();
}
thread_group 関数呼び出し構文が正しいかどうかはわかりませんが、十分に近いです。うまくいけば、これが役に立ちます。