在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ Why does chan not deadlock in goroution?

Why does chan not deadlock in goroution?

package main
func main() {
    ch1 := make(chan int)
    go pump(ch1) // pump hangs
}
func pump(ch chan int) {
    ch <- 1
    ch <- 2
}

Why is it that there is nothing wrong with writing a corruption? Blocking the main process will deadlock

回答
編輯回答
檸檬藍(lán)

當(dāng)所有的進(jìn)程或線程都在等待資源釋放,而資源又釋放不了才會發(fā)生死鎖。

在這里main沒等待其它goroutine,自己先跑完了, 所以沒有數(shù)據(jù)流入ch,一共執(zhí)行了一個main, 并且沒有發(fā)生阻塞,所以沒有死鎖, 將代碼改成:

package main

import "sync"

func main() {
    ch1 := make(chan int)

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        ch1 <- 1
        wg.Done()
    }()

    wg.Wait()
    // <-ch1
}

就會發(fā)生死鎖

2018年2月25日 22:39