使用並發Go程式時,處理同步對於避免死鎖至關重要。當嘗試協調多個 goroutine 並使用sync.WaitGroup 等待它們完成時,就會出現這樣的情況。然而,有時,你可能會遇到錯誤:「致命錯誤:所有 goroutine 都在睡眠 - 死鎖!」。
此錯誤源自於sync.WaitGroup 的錯誤使用。在提供的程式碼片段中:
問題在於將sync.WaitGroup物件直接傳遞給doWork函數。當按值傳遞值時,會建立物件的副本,這會導致意外行為。
修正涉及將指標傳遞給sync.WaitGroup:
透過傳遞一個指針,每個 goroutine 將引用相同的 WaitGroup 對象,確保在預期實例上呼叫 Done() 。這解決了死鎖問題,讓程式能夠無錯誤地執行。
記住,當使用sync.WaitGroup同步goroutine時,一定要傳遞一個指向物件的指針,以確保行為一致並避免潛在的死鎖。
以上是使用Go的sync.WaitGroup時如何避免死鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!