我正在使用C ++进行多线程合并排序。结果非常奇怪,即使要排序的数量非常大(5毫安),添加更多线程也会减少运行时间。我希望添加更多线程会减少运行时间。我认为我的代码中存在一些错误。有谁可以帮助我?
Buffers
答案 0 :(得分:1)
不要在collectionView.reloadData()
中分配内存,提前分配一个大小merge
的大数组,并在MAX
内使用它。
您的merge_sort
函数被多次调用,而且来自多个线程。每个merge
修改免费商店(堆),这通常以某种形式的关键部分完成。有可扩展的分配器,例如来自英特尔TBB的new
用于此目的。但是,在mergesort实现中没有理由进行这样的分配。
此外,您不必在malloc
函数中delete[]
temp
。您的代码还有许多问题,例如数据竞争(merge
)。您只按顺序执行最终int thread_part = part++;
,这会影响可伸缩性。 mergesort(和quicksort)的高效实现通常在递归结束时使用插入排序(例如,低于10个元素),因为它比调用函数更快。等...