亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從官方博客中了解圍棋比賽條件示例

從官方博客中了解圍棋比賽條件示例

Go
慕桂英546537 2022-08-15 19:16:06
我正在通讀 https://blog.golang.org/race-detector,我不完全相信為什么示例 1 是競爭條件。以下是具有爭用條件的代碼摘錄(第 14-16 行):11 func main() {12     start := time.Now()13     var t *time.Timer14     t = time.AfterFunc(randomDuration(), func() {15         fmt.Println(time.Now().Sub(start))16         t.Reset(randomDuration())17     })18     time.Sleep(5 * time.Second)19 }20 21 func randomDuration() time.Duration {22     return time.Duration(rand.Int63n(1e9))23 }這篇博客文章繼續解釋為什么存在競爭條件:如果初始計時器持續時間非常小,則計時器函數可能會在主 goroutine 為 t 賦值之前觸發,因此對 t.Reset 的調用是使用 nil t 進行的。我沒有遵循為什么持續時間對返回值很重要。即使在單獨的 goroutine 中運行,在繼續執行其代碼之前,它不會提供返回值嗎?在填充返回值的足夠長的持續時間下,會發生什么變化?time.AfterFunc
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

在給定的示例中,可以執行以下操作:

  1. 通話時間。AfterFunc()

  2. 時間。AfterFunc() 啟動一個等待計時器攻擊的 goroutine。時間。Afterfunc繼續運行。

  3. 定時器罷工,調用余真菌

  4. 在Func調用t.Reset->恐慌之后,因為t將在步驟5處設置

  5. 調用時間。AfterFunc() 返回,設置 t


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號