這是怎麼得到在Ruby中實現?特別是,產生的線程的結果如何返回到主線程?多線程合併排序
def merge_sort(array)
return array if base_case?(array)
first_half, second_half = split_into_halves(array)
# spawn recursive calls
first_spawn = Thread.new {
sorted_first_half = merge_sort(first_half)
}
second_spawn = Thread.new {
sorted_second_half = merge_sort(second_half)
}
# sync
first_spawn.join
second_spawn.join
merge(sorted_first_half, sorted_second_half)
end
我不知道Ruby,但它似乎最後的語句應該是返回合併(...),或數組=合併(...),然後返回數組。我還假設base_case表示數組大小<2。 – rcgldr
是的,base_case表示array.size <2.我的想法是#join是Ruby嘗試合併線程。 Ruby代碼的最後一行是自動返回的,@rcgldr – Trajanson
最後的語法看起來很奇怪。沒有爲merge(...)指定返回數組,爲什麼它應該返回數組中的結果? merge_sort函數只是返回,不像函數明確返回數組的開始位置。 – rcgldr