GO 协程 为什么这样会造成死锁

packagemain
import(
"fmt"
)
funcf1(inchanint){
fmt.Println(<-in)
}
funcmain(){
out:=make(chanint)
out<-2
gof1(out)
}
为什么这样会造成死锁?怎么解决?
肥皂起泡泡
浏览 928回答 3
3回答

ThomasHuke

package main import (    "fmt"    "time" ) func f1(in chan int) {    fmt.Println(<-in) } func main() {    out := make(chan int)    go func() {       out <- 2    }()     f1(out)    time.Sleep(time.Second) } //或者: package main import (    "fmt"    "time" ) func f1(in chan int) {    fmt.Println(<-in) } func main() {    out := make(chan int,2)    out <- 2    go f1(out)    time.Sleep(time.Second) }

哔哔one

改成这样:packagemainimport("fmt")funcf1(inchanint){fmt.Println(

Qyouu

out队列无缓冲,主线程会阻塞在这里。解决方法有两个。第一,设置缓冲:packagemainimport("fmt")funcf1(inchanint){fmt.Println(
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript