如何修复go中的并发合并排序

如何修复go中的并发合并排序,go,concurrency,mergesort,Go,Concurrency,Mergesort,我正在尝试学习go-lang,同时在实现合并排序时面临问题。它没有正确排序数组 我尝试过寻找任何比赛条件,也尝试过在不同阶段打印。但似乎无法解决问题。任何分析和指出此类问题的工具 主程序包 进口( “fmt” “时间” ) func合并(a[]整数,ch chan整数){ //延迟关闭(ch) 如果len(a)==0{ 关闭(ch) 返回 } 如果len(a)==1{ ch您的合并阶段被打破:您必须发送ch中ch1和ch2中的所有值,但是一旦ch1或ch2中的任何一个被耗尽,您的代码就会停止。一

我正在尝试学习go-lang,同时在实现合并排序时面临问题。它没有正确排序数组

我尝试过寻找任何比赛条件,也尝试过在不同阶段打印。但似乎无法解决问题。任何分析和指出此类问题的工具

主程序包
进口(
“fmt”
“时间”
)
func合并(a[]整数,ch chan整数){
//延迟关闭(ch)
如果len(a)==0{
关闭(ch)
返回
}
如果len(a)==1{

ch您的合并阶段被打破:您必须发送
ch
ch1
ch2
中的所有值,但是一旦
ch1
ch2
中的任何一个被耗尽,您的代码就会停止。一旦您被耗尽,例如
ch2
您就必须将
ch1
中的所有内容发送到
c

一些东西(一定要清理环境!)

用于ok1 | | ok2的
{
if(ok1&&ok2&&v1for ok1 || ok2 {
    if (ok1 && ok2 && v1 < v2) || (ok1 && !ok2) {
        ch <- v1
        v1, ok1 = <-ch1
    } else if (ok1 && ok2 && v1 >= v2) || (!ok1 && ok2) {
        ch <- v2
        v2, ok2 = <-ch2
    }
}