blocking.go

package main

import (
    "fmt"
)

func f1(in chan int) {
    fmt.Println(<-in)
}

func main() {
    out := make(chan int)
    out <- 2
    go f1(out)
}

定义通道时如果不传第二个值,那这个通道就是无缓冲通道,如果接收者未准备好接受数据,那这个通道就是阻塞的,所以要把f1放到out <- 2上边,同时如果f1没用go关键字启动协程的话会一直等待数据,同样造成阻塞。

努力学习的小透明
讨论数量: 1

定义通道时如果不传第二个值,那这个通道就是无缓冲通道,如果接收者未准备好接受数据,那这个通道就是阻塞的 这句话说的是,如果接收者没有准备好,那消息就不会发送出去,这个操作不会成功并且会阻塞在这里。所以会报deadlock。

2年前 评论

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