Go 中的遞歸鎖定
Go 的sync 套件中,Mutex 資料結構不支援遞歸鎖定。這意味著 Goroutine 不能連續多次取得相同的鎖。雖然這看起來像是一個限制,但對於在 Go 中實現遞歸鎖存在強烈的反對意見。
根據 Go 開發團隊成員 Russ Cox 的說法,遞歸互斥鎖從根本上來說是有缺陷的,因為它們損害了互斥鎖的保證旨在提供。互斥體保護不變量,這是程式資料結構的基本屬性。當 Goroutine 取得互斥鎖時,它假設不變量被保留。
但是,在遞歸互斥鎖中,一個 Goroutine 可以多次取得相同的鎖。這可能會破壞不變量,因為 goroutine 可能會解鎖互斥體並在重新獲取資料結構之前修改資料結構。這可能會導致不可預測且可能錯誤的程序行為。
Cox 建議重新設計程式碼以避免需要遞歸鎖。在大多數情況下,可以編寫無需遞歸鎖定即可正確運行的程式碼。
如果絕對必要,可以使用一些變通方法來模擬 Go 中的遞歸鎖定。然而,這些解決方法不受 Go 標準函式庫支持,應謹慎使用。
以上是為什麼 Go 的 Mutex 不支援遞迴鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!