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

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

我如何等到接收器通道完成它在 golang 中的執(zhí)行?

我如何等到接收器通道完成它在 golang 中的執(zhí)行?

Go
Smart貓小萌 2022-06-06 15:16:18
我有這個示例代碼,我正面臨這個同步問題,任何人都可以幫助我如何實現這一點。package mainimport "fmt"func main() {baseChan := make(chan int)go func(bCh chan int){for {select{    case stats, _ := <- bCh:    fmt.Println("base stats", stats)}}}(baseChan)second := make(chan int)go func (sCh chan int) {fmt.Println("second channel")for {select {case stats, _ := <- sCh:    fmt.Println("seconds stats", stats)    baseChan <- stats}}}(second)runLoop(second)}func runLoop(second chan int) { for i := 0; i < 5; i++ {fmt.Println("writing i", i)    second <- i}}實際輸出:writing i 0second channelseconds stats 0base stats 0writing i 1writing i 2seconds stats 1seconds stats 2我希望輸出是這樣的,writing i 0seconds stats 0base stats 0writing i 1seconds stats 1base stats 1writing i 2seconds stats 2base stats 2
查看完整描述

2 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

您可以編寫 goroutine 以便它們相互等待。例如,這是一個位于生產者和消費者之間的中級傳輸器函數,并迫使他們緩慢前進:


func middle(in, out chan int, inAck, outAck chan struct{}) {

    defer close(out)

    for value := range in {

        fmt.Println("middle got", value)

        out <- value // send

        fmt.Println("middle now waiting for ack from final")

        <-outAck            // wait for our consumer

        inAck <- struct{}{} // allow our producer to continue

    }

}

但總而言之,這是愚蠢的。強制生產者等到消費者完成并使用通道是沒有意義的,因為如果我們想讓生產者等待,我們只需編寫:


for ... {

    produced_value = producerStep()

    final(middle(produced_value))

}

whereproducerStep()產生下一個值,完全省去通道。


查看完整回答
反對 回復 2022-06-06
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

代碼按預期工作。runLoop()但是你可以做一件事,在函數的兩個連續(xù)步驟之間放置一定的間隔。但是不建議設置固定的時間間隔,您需要編寫一些代碼來確保完成這些工作。只是展示這個例子,向你展示這里發(fā)生了什么。


func runLoop(second chan int) {

    for i := 0; i < 5; i++ {

        fmt.Println("writing i", i)

        second <- i

        time.Sleep(100 * time.Millisecond) // <-- here

    }

}

這里發(fā)生了什么?只需給予足夠的時間來完成在單獨的 goroutine 中運行的作業(yè)。


輸出:


writing i 0

seconds stats 0

base stats 0


writing i 1

seconds stats 1

base stats 1


writing i 2

seconds stats 2

base stats 2


writing i 3

seconds stats 3

base stats 3


writing i 4

seconds stats 4

base stats 4


查看完整回答
反對 回復 2022-06-06
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號