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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如果包含 time.Sleep,Goroutine 不會(huì)執(zhí)行

如果包含 time.Sleep,Goroutine 不會(huì)執(zhí)行

Go
動(dòng)漫人物 2021-09-13 15:24:48
下面的代碼運(yùn)行得很好:package mainimport (    "fmt")func my_func(c chan int){    fmt.Println(<-c)}func main(){    c := make(chan int)    go my_func(c)    c<-3}但是如果我改變c<-3到time.Sleep(time.Second)c<-3我的代碼不執(zhí)行。我的直覺(jué)是main在my_func完成執(zhí)行之前以某種方式返回,但似乎添加暫停應(yīng)該沒(méi)有任何效果。我完全迷失在這個(gè)簡(jiǎn)單的例子中,這里發(fā)生了什么?
查看完整描述

1 回答

?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

當(dāng)main函數(shù)結(jié)束時(shí),程序也隨之結(jié)束。它不會(huì)等待其他 goroutine 完成。

引用Go 語(yǔ)言規(guī)范:程序執(zhí)行

程序執(zhí)行首先初始化主包,然后調(diào)用函數(shù)main。當(dāng)該函數(shù)調(diào)用返回時(shí),程序退出。它不會(huì)等待其他(非main)goroutine 完成。

因此,當(dāng)您的main函數(shù)通過(guò)在通道上發(fā)送值而成功時(shí),程序可能會(huì)立即終止,然后另一個(gè) goroutine 有機(jī)會(huì)將接收到的值打印到控制臺(tái)。

如果要確保將值打印到控制臺(tái),則必須將其與退出main函數(shù)的事件同步:

帶有“完成”頻道的示例(在Go Playground上嘗試):

func my_func(c, done chan int) {
    fmt.Println(<-c)
    done <- 1}func main() {
    c := make(chan int)
    done := make(chan int)    go my_func(c, done)
    time.Sleep(time.Second)
    c <- 3
    <-done}

由于done也是一個(gè)無(wú)緩沖通道,因此在main函數(shù)結(jié)束時(shí)從它接收必須等待在done通道上發(fā)送一個(gè)值,這c是在接收到通道上發(fā)送的值并將其打印到控制臺(tái)之后發(fā)生的。

對(duì)看似不確定的運(yùn)行的解釋:

夠程可能會(huì)或可能不會(huì)被并行執(zhí)行在同一時(shí)間。同步確保某些事件發(fā)生在其他事件之前。這是您獲得的唯一保證,也是您唯一應(yīng)該依賴的東西。之前發(fā)生過(guò)2 個(gè)這樣的例子:

  • go啟動(dòng)新 goroutine的語(yǔ)句發(fā)生在 goroutine 開始執(zhí)行之前。

  • 通道上的發(fā)送發(fā)生在來(lái)自該通道的相應(yīng)接收完成之前。

有關(guān)更多詳細(xì)信息,請(qǐng)閱讀Go 內(nèi)存模型。

回到你的例子:

來(lái)自無(wú)緩沖通道的接收發(fā)生在該通道上的發(fā)送完成之前。

所以你得到的唯一保證是運(yùn)行的 goroutinemy_func()將接收cmain(). 但是一旦接收到值,該main函數(shù)可能會(huì)繼續(xù),但由于發(fā)送后沒(méi)有更多語(yǔ)句,它只是結(jié)束 - 與程序一起。無(wú)論非main夠程將有時(shí)間機(jī)會(huì)與打印fmt.Println()沒(méi)有定義。


查看完整回答
反對(duì) 回復(fù) 2021-09-13
  • 1 回答
  • 0 關(guān)注
  • 344 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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