gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:20:45 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com