我在 Go 程序中有一堆函數(shù),它們在一個結構上工作,該結構使用互斥鎖來管理對其函數(shù)的并發(fā)訪問。其中一些對特定數(shù)據(jù)進行操作的函數(shù)需要鎖,因此使用 mutex.Lock() 來獲取管理對該數(shù)據(jù)訪問的互斥鎖。今天我遇到了一個問題,其中兩個鎖定方法相互調用。一旦 mutex.Lock() 第二次被調用,它就會阻塞——當然。我面臨的問題與此代碼非常相似:http : //play.golang.org/p/rPARZsordI關于如何解決這個問題,Go 中有什么最佳實踐嗎?據(jù)我所知,遞歸鎖在 Go 中不可用。
1 回答

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
這似乎是您系統(tǒng)的設計缺陷。您應該找出需要鎖定和解鎖的部分。例如,如果你做的是
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() }
- 1 回答
- 0 關注
- 227 瀏覽
添加回答
舉報
0/150
提交
取消