为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复工作池死锁

如何修复工作池死锁

Go
炎炎设计 2023-07-17 16:59:16
我编写了一个工作池,其中的工作是接收一个整数并将该数字转换为字符串返回。但是我遇到了一个fatal error: all goroutines are asleep - deadlock!错误。我做错了什么以及如何解决它?https://play.golang.org/p/U814C2rV5na
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我能够复制您的问题并通过使用指针而master不是普通变量来修复它。


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


func (m *Master) NewWorker() {

    m.Workers = append(m.Workers, Worker{})

}

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


0

1

2

3

4

5

6

7

8

9

10

.

.

.

原因:

每次调用NewWorker()方法时,您都不会将 a 附加worker到同一个主对象。这就是为什么该切片从未填充 3 个工作人员,而本应如此。


去游乐场


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信