我在使用boost线程库编写并行快速排序时遇到问题。我把它缩小到一段代码,这段代码可以工作但是是串行代码:
void local_quicksort(vector<int>& input)
{
//Divide vector into equal sized chunks then quicksort the subsections
for (int i = 0; i < NUM_THREADS; i++)
{
quicksort(input, i * input.size()/NUM_THREADS, (i+1) * input.size()/NUM_THREADS);
}
return;
}
我正在尝试使用此代码段来并行化相同的功能:
void local_quicksort(vector<int>& input)
{
boost::thread_group bthreads;
//Divide vector into equal sized chunks for each thread then quicksort the subsections
for (int i = 0; i < NUM_THREADS; i++)
{
bthreads.create_thread(boost::bind(&quicksort, input, i * input.size()/NUM_THREADS, (i+1) * input.size()/NUM_THREADS));
}
bthreads.join_all();
return;
}
我无法弄清楚的部分是并行化版本似乎确实在调用quicksort(我在quicksort函数中放了一个print语句,它肯定被调用了)但是实际上没有进行排序(输出)是完全未分类的)。谁能告诉我这里发生了什么?