我是 Golang 的新手,我有一个使用 实现的任务,我WaitGroup想Mutex将其转换为使用Channels。
该任务的一个非常简短的描述是:根据需要拒绝尽可能多的 go 例程来处理结果,并在主 go 例程中等待并收集所有结果。
我使用的实现WaitGroup如下Mutex:
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
func process(input int, wg *sync.WaitGroup, result *[]int, lock *sync.Mutex) *[]int {
defer wg.Done()
defer lock.Unlock()
rand.Seed(time.Now().UnixNano())
n := rand.Intn(5)
time.Sleep(time.Duration(n) * time.Second)
lock.Lock()
*result = append(*result, input * 10)
return result
}
func main() {
var wg sync.WaitGroup
var result []int
var lock sync.Mutex
for i := range []int{1,2,3,4,5} {
wg.Add(1)
go process(i, &wg, &result, &lock)
}
}
如何使用Mutexto替换内存同步Channels?
我的主要问题是我不确定如何确定处理最终任务的最终 go 例程,因此让那个成为关闭channel. 这个想法是,通过关闭channel主 go 例程可以循环遍历channel,检索结果,当它看到channel已经关闭时,它继续前进。
在这种情况下,关闭通道的方法也可能是错误的,因此我在这里问。
更有经验的 go 程序员如何使用 解决这个问题channels?
牧羊人nacy
慕妹3146593
精慕HU
相关分类