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

解决 Go 中重复的互斥锁

解决 Go 中重复的互斥锁

Go
ITMISS 2021-11-15 20:47:42
我在 Go 程序中有一堆函数,它们在一个结构上工作,该结构使用互斥锁来管理对其函数的并发访问。其中一些对特定数据进行操作的函数需要锁,因此使用 mutex.Lock() 来获取管理对该数据访问的互斥锁。今天我遇到了一个问题,其中两个锁定方法相互调用。一旦 mutex.Lock() 第二次被调用,它就会阻塞——当然。我面临的问题与此代码非常相似:http : //play.golang.org/p/rPARZsordI关于如何解决这个问题,Go 中有什么最佳实践吗?据我所知,递归锁在 Go 中不可用。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

这似乎是您系统的设计缺陷。您应该找出需要锁定和解锁的部分。例如,如果你做的是


func (t *Thing) A() { t.Lock(); defer t.Unlock(); t.foo(); t.B() }

func (t *Thing) B() { t.Lock(); defer t.Unlock(); t.bar() }

那么你应该做的是


func (t *Thing) A() { t.Lock(); defer t.Unlock(); t.foo(); t.b() }

func (t *Thing) B() { t.Lock(); defer t.Unlock(); t.b() }

func (t *Thing) b() { t.bar() }


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

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