如何修复工人池死锁

时间:2019-09-03 11:54:16

标签: go

我写了一个工人池,工作是接收一个整数并将该数字转换为字符串。但是我遇到了fatal error: all goroutines are asleep - deadlock!错误。我在做什么错了,我该如何解决?

https://play.golang.org/p/U814C2rV5na

1 个答案:

答案 0 :(得分:1)

我能够使用指向master的指针而不是普通变量来复制并解决问题。

基本上只需将您的NewWorker()方法更改为此:

func (m *Master) NewWorker() {
    m.Workers = append(m.Workers, Worker{})
}

这是程序更改后输出的输出:

0
1
2
3
4
5
6
7
8
9
10
.
.
.

原因:

每次调用NewWorker()方法时,都没有将worker附加到同一主对象。这就是为什么切片从来没有像以前那样填充3个工人的原因。

Go Playground