【发布时间】:2018-11-06 10:01:34
【问题描述】:
我编写了一些旨在使用通道进行同步的代码。
var counter int64 // shared resource
var wg sync.WaitGroup
func main() {
ch := make(chan int64)
wg.Add(2)
go incCounter(ch)
go incCounter(ch)
ch <- counter
wg.Wait()
fmt.Println("Final Counter:", counter) // expected value is 4
}
func incCounter(ch chan int64) {
defer wg.Done()
for count := 0; count < 2; count++ {
value := <-ch
value++
counter = value
ch <- counter
}
}
当我运行这个程序时,发生了一个错误:all goroutines are asleep - deadlock!。但是我无法解决问题,我不知道出了什么问题。有人可以帮忙吗?
【问题讨论】:
-
wg声明在哪里? -
抱歉,我忘记了。
wg的类型是sync.WaitGroup。 @AkhilThayyil -
如果您这样做是为了学习,那很好,但作为替代方案,您可能需要考虑为此目的使用原子计数器,可以在此处找到示例gobyexample.com/atomic-counters
-
谢谢。我会试一试。@tmcnicol
标签: go