2 回答

TA貢獻2036條經(jīng)驗 獲得超8個贊
規(guī)則很簡單:如果從多個 goroutine 訪問一個變量并且其中至少有一個是寫入,則需要顯式同步。
在您的情況下是這樣:您的一個 goroutine 寫入token
變量(還有err
變量?。?,另一個 goroutine 讀取它,因此您必須同步訪問。
由于token
它不是結構的一個字段threatq
,因此放置保護它的互斥量并不明智。始終將互斥量放在它應該保護的數(shù)據(jù)附近。
一些注意事項:如前所述,您還err
從多個 goroutine 中寫入和讀取局部變量。你不應該這樣做,而是創(chuàng)建另一個局部變量來保存來自其他 goroutines 的錯誤(除非你想“translfer” goroutines 之間的錯誤,但這里不是這種情況)。

TA貢獻1874條經(jīng)驗 獲得超12個贊
是的,您也可以嘗試在啟用標志的情況下運行此測試-race
。Go 的競爭檢測器可能會告訴您令牌是跨多個 goroutine 的共享變量。因此,必須使用Mutex
或 來保護它RWMutex
。
在您的情況下,我認為這RWMutex
更合適,因為有一個 goroutinetoken
每 30 分鐘更改(即寫入)狀態(tài),而另一個 goroutine 讀取其值。
如果您不使用鎖保護共享變量,第二個 goroutine 可能會讀取舊值token
,這可能已過期。
- 2 回答
- 0 關注
- 145 瀏覽
添加回答
舉報