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

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

Go 內(nèi)部如何處理 os.Signal 通道?

Go 內(nèi)部如何處理 os.Signal 通道?

Go
慕哥6287543 2022-06-13 10:24:45
有代碼時(shí):package mainimport (    "os"    "os/signal")func main() {    sig := make(chan os.Signal, 1)    signal.Notify(sig)    <-sig}運(yùn)行沒有問題,當(dāng)然,阻塞直到你發(fā)送一個(gè)中斷程序的信號(hào)。但:package mainfunc main() {    sig := make(chan int, 1)    <-sig}拋出此錯(cuò)誤:fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.main()    /home/user/project/src/main.go:5 +0x4dexit status 2雖然我理解為什么從int通道讀取會(huì)導(dǎo)致死鎖,但我只是懷疑它os.Signal不會(huì),因?yàn)樗耐ǖ揽赡軙?huì)遭受來自“外部”的寫入,因?yàn)樗幚硇盘?hào)并且它們來自程序外部。我的懷疑有點(diǎn)正確嗎?如果是這樣,運(yùn)行時(shí)如何處理與其他通道類型不同的情況?謝謝!
查看完整描述

1 回答

?
湖上湖

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

您遇到了死鎖,因?yàn)閲L試從通道接收消息,但沒有其他運(yùn)行的沒有發(fā)送者的 goroutine 存在。同時(shí)調(diào)用在后臺(tái)signal.Notify啟動(dòng)watchSignalLoop()goroutine,您可以在此處驗(yàn)證實(shí)現(xiàn)細(xì)節(jié)https://golang.org/src/os/signal/signal.go。

頻道不關(guān)心元素類型,除非你的元素類型大于 64kB(嚴(yán)格來說,還有其他細(xì)微差別,請(qǐng)檢查實(shí)現(xiàn))。

不要猜測(cè)運(yùn)行時(shí)是如何工作的,對(duì)其進(jìn)行研究。例如,您可以檢查調(diào)用make(chan int). 您可以go tool compile -S main.go | grep main.go:line of make chan檢查從運(yùn)行時(shí)包中調(diào)用了哪個(gè)函數(shù)。然后只需跳轉(zhuǎn)到該文件并花時(shí)間了解實(shí)現(xiàn)。您會(huì)看到與其他事物相比,通道的實(shí)現(xiàn)非常簡(jiǎn)單明了

希望能幫助到你!


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

添加回答

舉報(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)