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

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

Go Channels - 推送到通道會停止執(zhí)行

Go Channels - 推送到通道會停止執(zhí)行

Go
慕雪6442864 2023-08-07 11:07:39
我正在嘗試創(chuàng)建一個命令行測驗,用戶將被問到一個又一個問題,直到他們完成最后一個問題或超時。我想使用渠道,這樣我就可以學習如何正確使用它們,可以說,我遇到了障礙。CorrectAnswersCh 的想法是從 0 開始,每次正確答案后,它都會增加 1。在我將零放入通道后,測驗始終停止在 quiz() 函數(shù)的第 3 行。我在下面添加了一些代碼,但完整的代碼在這里: https://play.golang.org/p/vzRCTc7MpIKfunc main() {    questions, err := getCsvData()    var limit = time.Duration(3)    flag.Parse()    if err != nil {        log.Fatal(err)    }    quizComplete := make(chan bool)    correctAnswersCh := make(chan int)    go quiz(quizComplete, questions, correctAnswersCh)    select {    case <-time.After(limit*time.Second):        fmt.Println("Timed Out")    }    fmt.Printf("Correct Answers: %v\n", <-correctAnswersCh)}func quiz(quizComplete chan bool, questions [][]string, correctAnswersCh chan int) {    reader := bufio.NewReader(os.Stdin)    correctAnswersCh <- 0    // execution stops here.  0 is added to correctAnswersCh, then the quiz func stops    for _, question := range questions {        fmt.Print(question[0], "= ")        answer, _ := reader.ReadString('\n')        if strings.TrimSpace(answer) == question[1] {            cA := <-correctAnswersCh            cA++            correctAnswersCh <- cA        }    }    quizComplete <- true}
查看完整描述

1 回答

?
守著星空守著你

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

您的correctAnswersCh頻道是無緩沖的,因此在其中發(fā)送任何內容都會受到阻塞,直到有人從其中接收為止。由于您的main()函數(shù)僅在超時后接收來自它的信息,因此在此之前您的應用程序將被阻止。

一種簡單的解決方法是為通道提供 1 個緩沖區(qū):

correctAnswersCh?:=?make(chan?int,?1)

盡管這是渠道的一些奇怪用法。如果您的目的是創(chuàng)建并發(fā)安全計數(shù)器,請使用 aotmic 計數(shù)器,例如atomic.AddInt32()。另一種選擇是在從多個 goroutine 并發(fā)訪問時使用互斥體(sync.Mutexsync.RWMutex)來保護資源(變量)。


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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