我不知道的適應度函數返回,更不用說做,但一個想法是圍繞編寫一個包裝的功能是什麼它稱它爲「m」倍 - 在這種情況下爲100/8或12倍。然後創建一個循環「n」次,每次調用thread_group :: add_thread,這會產生一個調用wrapper函數的新線程。
的基本想法是這樣的:
/* ??? */ 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函數調用語法正確的,但它的足夠接近。希望這有助於。