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

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

go select語句中發(fā)送和接收操作之間的優(yōu)先級規(guī)則

go select語句中發(fā)送和接收操作之間的優(yōu)先級規(guī)則

Go
慕的地8271018 2022-11-15 17:11:31
go select 語句中發(fā)送和接收操作之間是否有優(yōu)先級規(guī)則?由于“發(fā)送”操作始終準備就緒,不像“接收”操作等待來自通道的某些內容,我總感覺“發(fā)送”將首先在選擇上執(zhí)行。我嘗試了一些代碼來測試發(fā)送和接收都準備好時會發(fā)生什么:package mainimport (    "fmt"    "time")func main() {    ch1 := make(chan string)    ch2 := make(chan string)    go goOne(ch1)    go goTwo(ch2)    time.Sleep(time.Second * 2)    select {    case ch2 <- "To goTwo goroutine":    case msg1 := <-ch1:        fmt.Println(msg1)    }}func goOne(ch chan string) {    ch <- "From goOne goroutine"}func goTwo(ch chan string) {    msg := <-ch    fmt.Println(msg)}結果似乎總是“來自 goOne goroutine”。所以看起來接收操作具有優(yōu)先級。但這是設計效果嗎?還是會發(fā)生先執(zhí)行發(fā)送的情況?我在文檔中找不到信息如果我希望接收操作具有優(yōu)先權,我可以依賴它還是應該做其他事情?
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

go select 語句中發(fā)送和接收操作之間是否有優(yōu)先級規(guī)則?


不可以。當case同時準備好一個以上時,隨機執(zhí)行一個。


因為“發(fā)送”操作總是準備好的


不對。當另一側沒有接收任何內容或緩沖通道的緩沖區(qū)已滿時,發(fā)送操作可能只是阻塞(即未準備好)。


還是會發(fā)生先執(zhí)行發(fā)送的情況?


Yes, but you may see no output when this case is selected because your program resumes execution in main and exits immediately before the goTwogoroutine can actually print anything.


如果我希望接收操作具有優(yōu)先級 [...]


select 語句的語義是:“執(zhí)行先準備好的”。如果一種情況必須優(yōu)先于另一種情況,請將另一種情況更改為default(如果沒有其他準備就緒則運行):


    select {

    case msg1 := <-ch1:

        fmt.Println(msg1)

    default:

        ch2 <- "To goTwo goroutine"

    }


查看完整回答
反對 回復 2022-11-15
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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