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

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

函數變量在 golang 中并發安全嗎?

函數變量在 golang 中并發安全嗎?

Go
紅顏莎娜 2022-09-12 20:45:36
我聲明了以下類型type TestFn func(id int, ctx context.Context) errorvar Func1 = TestFn(func(id int, ctx context.Context) error {  // do some work -- the execution block is concurrent safe}var Func2 = TestFn(func(id int, ctx context.Context) error {  // do some work}var Func3 = TestFn(func(id int, ctx context.Context) error {  // do some work}func Execute()   for i := 0; i < 5; i++ {      go Func1(i, ctx)      go Func2(i, ctx)      go Func3(i, ctx)   }}由于 ,是全局變量并分配給函數,我可以在具有不同參數的多個 go 例程中運行相同的函數嗎?Func1Func2Func3
查看完整描述

2 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

規則很簡單:對于來自多個 goroutine(無同步)的并發訪問,其中至少有一個訪問是寫入,則沒有一個值是安全的。

您的示例僅讀取函數變量,因此它是安全的。如果有一個戈魯廷在執行的同時運行,那將修改函數變量,那將是不安全的。但這在你的例子中不會發生。Execute()

注意:你的函數變量當然會在包初始化期間編寫一次。這發生在開始之前的單個戈魯丁中。main()


查看完整回答
反對 回復 2022-09-12
?
婷婷同學_

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

是的,您的代碼有效。


如果一個 goroutine 試圖重新分配 的值,而另一個 goroutine 試圖開始相同的值,你會遇到問題 - 這將是一個競爭條件。FuncXXFuncXX


查看完整回答
反對 回復 2022-09-12
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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