gpt4 book ai didi

concurrency - Func 不会运行;增量 channel

转载 作者:IT王子 更新时间:2023-10-29 02:17:37 24 4
gpt4 key购买 nike

我正在编写一个函数,我试图在其中增加一个 channel 。在一个更大的程序中,这是行不通的,它实际上卡在一条看起来像这样的线上:

current = <-channel

go func s 正在运行,但程序似乎在这一行停止了。

我试图编写一个较小的 SSCCE,但现在我遇到了不同的问题。在这里:

package main                                                                    

import (
"fmt"
)

func main() {
count := make(chan int)

go func(count chan int) {
current := 0
for {
current = <-count
current++
count <- current
fmt.Println(count)
}
}(count)
}

然而,在上面的go func实际上似乎根本没有被调用。如果我放一个 fmt.Println for { 之前的声明,它不会打印出来。如果我把 fmt.Println在它们之前或之后的声明 go func block ,它们都会打印出来。

  1. 为什么上面例子中的自调用 block 似乎根本没有运行?
  2. 如果它正在运行,为什么它会在 current = <-count 上阻塞? ?我怎样才能正确增加 channel ?

最佳答案

没有更多信息,我无法回答第一个问题。您显示的代码有两个问题。首先,goroutine 启动后程序退出。第二个问题是 goroutine 正在等待发送计数的东西,如果你从计数 channel 接收它不会死锁。

这是显示死锁的示例 ( http://play.golang.org/p/cRgjZt7U2A ):

package main

import (
"fmt"
)

func main() {
count := make(chan int)

go func() {
current := 0
for {
current = <-count
current++
count <- current
fmt.Println(count)
}
}()
fmt.Println(<-count)
}

这是一个按照我认为您期望的方式工作的示例 (http://play.golang.org/p/QQnRpCDODu)

package main

import (
"fmt"
)

func main() {
count := make(chan int)

go func() {
current := 0
for {
current = <-count
current++
count <- current
fmt.Println(count)
}
}()
count <- 1
fmt.Println(<-count)
}

关于concurrency - Func 不会运行;增量 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com