並發Go 例程中的資料爭用
此程式碼示範了並發Go 程式中的資料爭用問題:
問題:
代碼列印「三」三次,而不是任意順序列印「一」、「二」和「三」。這是因為存在數據競爭。
解釋:
隱式地,程式碼在計算 goroutine 函數的參數時採用變數 v 的位址。 goroutine 函數 v.print() 相當於 (&v).print()。循環改變了 v 的值,當 goroutine 執行時,它們恰好具有循環的最後一個值(「三」)。
修正:
有多種方法可以解決此資料爭用:
以上是在 Go 中啟動 Goroutine 時如何避免數據競爭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!