c++ - 如何使用具有递归模板函数的线程

标签 c++ multithreading templates c++11

我一直在尝试用线程优化排序算法(快速排序)。我知道它在 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 退出。

最佳答案

您需要明确指出哪个是T模板参数:

thread t1(&quicksort<T>, arr, size, beginning, slow - 1);

否则编译器会认为您指的是函数模板,而不是具体的特化;它无法凭空推断出 T

关于c++ - 如何使用具有递归模板函数的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047929/

相关文章:

c - sprintf 线程安全吗?

c++ - 如何在编译时检查是否存在可以使用一组特定参数调用的函数?

c++ - 为什么这个初始化列表不能匹配模板参数?

c++ - cstdio 流与 iostream 流?

c++ - 在游戏中实现漫游行为

java - 使用同步方法的类的多个实例

等待超时后使用 Task.Wait 记录 C#/Tasks 错误两次

c++ - 如何将模板参数与 "if"和 "switch"语句一起使用?

c++ - 截屏到 Direct2D 兼容位图

c++ - 无法将 C++ 项目与 openssl 静态库链接