多线程合并排序的奇怪结果

时间:2018-02-22 04:24:49

标签: c++ multithreading sorting merge

我正在使用C ++进行多线程合并排序。结果非常奇怪,即使要排序的数量非常大(5毫安),添加更多线程也会减少运行时间。我希望添加更多线程会减少运行时间。我认为我的代码中存在一些错误。有谁可以帮助我?

Buffers

1 个答案:

答案 0 :(得分:1)

不要在collectionView.reloadData()中分配内存,提前分配一个大小merge的大数组,并在MAX内使用它。

您的merge_sort函数被多次调用,而且来自多个线程。每个merge修改免费商店),这通常以某种形式的关键部分完成。有可扩展的分配器,例如来自英特尔TBB的new用于此目的。但是,在mergesort实现中没有理由进行这样的分配。

此外,您不必在malloc函数中delete[] temp。您的代码还有许多问题,例如数据竞争(merge)。您只按顺序执行最终int thread_part = part++;,这会影响可伸缩性。 mergesort(和quicksort)的高效实现通常在递归结束时使用插入排序(例如,低于10个元素),因为它比调用函数更快。等...