c++线程用递归函数
C++ thread with a recursive function
void merge_sort_thread(vector<int>& array) {
if (1 < array.size()) {
vector<int> array1(array.begin(), array.begin() + array.size() / 2);
thread first= thread(merge_sort_thread,array1);
vector<int> array2(array.begin() + array.size() / 2, array.end());
thread second = thread(merge_sort_thread,array2);
first.join(); //wait for both ended
second.join();
merge (array1.begin(),array1.end(),array2.begin(),array2.end(),array.begin());
}
我正在使用Xcode构建和运行,这是一个构建失败。提示符:
/应用程序/xcode/内容/开发/工具链/XcodeDefault.xctoolchain/usr/include/c++/v1/线程:332:5:尝试使用已删除的函数
我知道线程在这里是不高效的,但我想知道为什么这不起作用
std::thread
推导绑定参数的类型,并在线程对象中存储它们的副本。在你的例子中,论证被演绎为一个参考。然而,引用,如你所知,是不能复制的。如果你想在std::thread
中传递一个引用到一个函数,那么你可以使用std::ref
来创建一个可复制的引用包装器:
thread first(merge_sort_thread,std::ref(array1));
您正在执行copy initialization
(见这里),并且线程不允许是可复制的对象,原因很明显。
替换为
thread foo = thread(...);
与
thread foo(...);
或者,如果你不像我一样对丑陋的代码有恐惧,并且你相信第11版c++的承诺…
thread foo{...};
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 如何将递归函数的线程与子线程同步
- C - 递归函数中的弦线
- c++中的多线程递归函数,已编辑.使用OpenMP的速度比以前慢
- OpenMP:如何在每个线程中使用递归函数
- c++线程用递归函数