第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么最后一個戈魯廷首先在循環(huán)中以兩個戈魯廷開始?

為什么最后一個戈魯廷首先在循環(huán)中以兩個戈魯廷開始?

Go
慕姐4208626 2022-09-12 16:42:33
我一直在用goroutines做一些測試,我注意到一個奇怪的行為(對我來說)使用這個代碼:游樂場: https://play.golang.org/p/Py4oqGqkYKmpackage mainimport (    "fmt"    "sync")var (    mu sync.Mutex    wg sync.WaitGroup)func main() {    var x int    for i := 0; i < 10; i++ {        wg.Add(2)        go func() {            mu.Lock()            x = i            mu.Unlock()            wg.Done()        }()        go func() {            mu.Lock()            fmt.Print("x: ", x, " \n")            mu.Unlock()            wg.Done()        }()        wg.Wait()    }}我期望輸出如下:x: 0 x: 1 x: 2 x: 3 x: 4 x: 5 x: 6 x: 7 x: 8 x: 9 但我收到了:x: 0 x: 0 x: 1 x: 2 x: 3 x: 4 x: 5 x: 6 x: 7 x: 8 看起來第二個戈魯廷被稱為第一個(如后進先出)。想到這一點,我試圖反轉(zhuǎn)戈魯廷,我得到了我所期望的答案:游樂場: https://play.golang.org/p/BC1r3NK6RBmpackage mainimport (    "fmt"    "sync")var (    mu sync.Mutex    wg sync.WaitGroup)func main() {    var x int    for i := 0; i < 10; i++ {        wg.Add(2)        go func() {            mu.Lock()            fmt.Print("x: ", x, " \n")            mu.Unlock()            wg.Done()        }()        go func() {            mu.Lock()            x = i            mu.Unlock()            wg.Done()        }()        wg.Wait()    }}輸出:x: 0 x: 1 x: 2 x: 3 x: 4 x: 5 x: 6 x: 7 x: 8 x: 9 任何人都可以幫助我理解這種行為嗎?轉(zhuǎn)到版本:go version go1.16.2 linux/amd64
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

Go 語言不指定 goroutine 在顯式同步之外使用通道、互斥鎖、等待組等執(zhí)行的順序。該規(guī)范允許兩個程序的兩個輸出。

您正在觀察互斥體的獲取順序,而不是戈魯丁開始的順序??赡苁谴竽c按預期的順序開始,但意外的大腸首先調(diào)用 Lock()。

該程序確保的唯一排序是通過等待組:每對戈魯丁將在下一對開始之前完成。


查看完整回答
反對 回復 2022-09-12
?
一只名叫tom的貓

TA貢獻1906條經(jīng)驗 獲得超3個贊

Go 例程提供并發(fā)性,并在具有獨立堆棧內(nèi)存的共享堆分配之上工作。它們的目的是在多核系統(tǒng)之上提供并發(fā)執(zhí)行。它們?nèi)绾尾⑿袌?zhí)行沒有任何支配因素。這由實際的處理器決定。我們只通過抽象層使用處理器。

實際上,沒有并發(fā)系統(tǒng)可以管理/預測結(jié)果。


查看完整回答
反對 回復 2022-09-12
  • 2 回答
  • 0 關(guān)注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號