gpt4 book ai didi

Ruby 并行排序

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:11 24 4
gpt4 key购买 nike

我正在尝试创建排序算法的多线程版本。我不明白为什么这个算法总是只返回 Array[1] 而不是完整的数组。

class Array
def quick_sort
return self if self.length <= 1
pivot = self[0]
if block_given?
less, greater_equals = self[1..-1].partition { yield(x, pivot) }
else
less, greater_equals = self[1..-1].partition { |x| x < pivot }
end
l = []
g = []
Process.fork {l = less.quick_sort }
Process.fork {g = greater_equals.quick_sort}
Process.waitall
return l + [pivot] + g
end
end

最佳答案

局部变量lg 没有传递到Process.fork 之外。它们仅在该 block 内有效。例如,

Process.fork{a = 2}
Process.wait
a #=> NameError: undefined local variable or method `a' for main:Object

在您的代码中,在 Process.fork 之前完成的 lg 赋值在您调用 return l + 时仍然有效[枢轴] + g

顺便说一下,如果您打算从 Process.fork 传递 lg,那么您在初始化这些变量之前Process.fork 是没有意义的。

关于Ruby 并行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894770/

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