非缓冲通道死锁的问题:fatal error: all goroutines are asleep - deadlock!

问题描述

非缓冲通道不是说发数据的时候,得有配对的接收者吗。

往通道发送了1,test里接收,然后再发送。

然后怎么死锁了

代码

package main

import (
    "fmt"
    "sync"
)

var b = 1
var aa sync.WaitGroup

func main() {

    aa.Add(2)

    ba := make(chan int)

    go test(ba)
    go test(ba)

    ba <- 1

    aa.Wait()

}

func test(ba chan int) {

    value := <-ba

    fmt.Println(value)
    b++
    ba <- b

    defer aa.Done()

}

运行结果

1
2
fatal error: all goroutines are asleep - deadlock!
野生菌
最佳答案

file 跑第二个协程方法test()的时候,只有生产,没有接收。

2年前 评论
Fantecy (楼主) 2年前
讨论数量: 2
野生菌

file 跑第二个协程方法test()的时候,只有生产,没有接收。

2年前 评论
Fantecy (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!