【问题标题】:How to make each worker work with Map Channel?如何让每个工作人员使用地图通道?
【发布时间】:2022-01-03 05:01:11
【问题描述】:

我的片段代码:

主要工作人员

func Workergrab(m map[int][][]string, ch chan [][]string, wg *sync.WaitGroup) {
    for y := 1993; y <= 2014; y++ {
        ch <- m[y]
    }
    wg.Done()
}

工人1

fmt.Println(<-ch)

好的,这就是我想做的事

-> Main-Worker grabbing map data from m[y] and send it over to channel
-> Worker1 do get data from channel that main worker send at same time depend on y

我已经在上面尝试过,worker1 只显示 m[1993] 数据。 搞砸了

我想知道使用地图通道,但不确定如何制作地图通道。 我认为频道的事情搞砸了......, 我想知道如何制作频道 map[int][][]string 所以我的 worker1 将从通道中捕获每个 ID “1993”、“1994”等的数据......

【问题讨论】:

    标签: go concurrency channel worker


    【解决方案1】:

    运行代码抛出all goroutines are asleep - deadlock! 错误;这意味着两个 goroutine 都已结束或永远等待写入/读取部分。

    Workergrab 尝试向ch 通道发送多个值,但Worker1 只打印一个ch 值并完成其工作。所以把Worker1改成如下就可以解决问题了:

    func Worker1(ch chan [][]string) {
        for {
            fmt.Println(<-ch)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 2016-02-02
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2014-05-19
      相关资源
      最近更新 更多