- 主题:go线程执行非自定义函数报死锁错误
go线程执行非自定义函数报死锁错误
var c chan int = make(chan int)
go fmt.Println(<-c)
c <- 1
var s string
fmt.Scanln(&s)
-----
fatal error: all goroutines are asleep - deadlock!
把 fmt.Println(<-c) 放在函数内就没问题
真是奇怪了
--
FROM 223.104.40.*
运行到第二行,应该在evaluate 括号里面表达式,这里卡住了。
【 在 nextworld8 的大作中提到: 】
: go线程执行非自定义函数报死锁错误
:
: var c chan int = make(chan int)
:
: go fmt.Println(<-c)
:
: c <- 1
:
: var s string
:
: fmt.Scanln(&s)
:
: ..................
发自「今日水木 on iPhone 12 Pro」
--
FROM 222.67.193.*
正解
- 来自 水木社区APP v3.4.2
【 在 hjjscofield 的大作中提到: 】
: 运行到第二行,应该在evaluate 括号里面表达式,这里卡住了。
--
FROM 123.148.201.*
「非自定义函数」,码农们的表述怎么都这么奇怪。
啥都喜欢加个「非」,你就直接叫「库函数」不好吗?
你这和是不是自定义函数没关系,关键是你得知道实参的求值时机。
尽管你写了 go xxx,但是实参的求值是立即的,函数本身的执行是在 Go 程里。
所以你这段代码相当于:
c := make(chan int)
x := <-c
go fmt.Println(x)
不锁你锁谁。
【 在 nextworld8 的大作中提到: 】
: go线程执行非自定义函数报死锁错误
: var c chan int = make(chan int)
: go fmt.Println(<-c)
: c <- 1
: var s string
: fmt.Scanln(&s)
: -----
: fatal error: all goroutines are asleep - deadlock!
: 把 fmt.Println(<-c) 放在函数内就没问题
: 真是奇怪了
--
FROM 27.38.197.*
赞,正解
【 在 flw 的大作中提到: 】
: 「非自定义函数」,码农们的表述怎么都这么奇怪。
: 啥都喜欢加个「非」,你就直接叫「库函数」不好吗?
: 你这和是不是自定义函数没关系,关键是你得知道实参的求值时机。
: ...................
--
FROM 221.219.243.*
牛掰
【 在 flw 的大作中提到: 】
: 「非自定义函数」,码农们的表述怎么都这么奇怪。
: 啥都喜欢加个「非」,你就直接叫「库函数」不好吗?
: 你这和是不是自定义函数没关系,关键是你得知道实参的求值时机。
: ...................
--
FROM 111.207.199.*