登录
首页 >  Golang >  Go问答

解决工作池中出现的死锁问题

来源:stackoverflow

时间:2024-03-07 22:27:26 429浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《解决工作池中出现的死锁问题》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我编写了一个工作池,其中的工作是接收一个整数并将该数字转换为字符串返回。然而,我遇到了 fatal 错误:所有 goroutine 都在睡觉 - 死锁! 错误。我做错了什么以及如何解决它?

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


解决方案


我能够通过使用指向 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

以上就是《解决工作池中出现的死锁问题》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>