我一直在尝试使用线程优化排序算法(快速排序)。我知道它在 std::sort() 实现中已经相当不错了,但我正试图通过我的计算机上的优化来击败它,同时了解线程。
所以,我的问题是,如何在递归快速排序函数中使用线程?
这是函数(删除了对问题不重要的东西):
template <typename T>
void quicksort(T arr[], const int &size, const int &beginning, const int &end)
{
// Algorithm here
thread t1(quicksort, arr, size, beginning, slow - 1);
thread t2(quicksort, arr, size, slow + 1, end);
}
如果我错了,您最终需要更多代码,请告诉我,我会更新它。
我正在使用 Visual Studio 2012,截至目前,错误状态:
error C2661: 'std::thread::thread' : no overloaded function takes 5 arguments
我也尝试在每个参数上调用 ref(arr) 等,但我得到了同样的错误。
编辑:在尝试@mfontanini 的解决方案后,我可以毫无错误地编译,但在运行时,我得到:
Debug Error!
Program: ...sktop\VisualStudio\Projects\SpeedTester\Debug\SpeedTester.exe
R6010
- abort() has been called
(Press Retry to debug the application)
一遍一遍地重复。最终,它以代码 3 退出。