1 回答

TA贡献1798条经验 获得超3个赞
我不认为在这里使用等待组有任何用处...由于您正在使用 for 循环内的通道,所以 putwg.wait()将阻塞,直到所有等待组都完成。
在这种情况下,除非有人在等待,否则将值放入 AddChan 将被阻止。该代码仅适用于第一种情况,之后它会挂起。
您可以删除wg.wait()for 循环和外部 for 循环,它会起作用。
func main() {
Arr1 := []string{"a", "b", "c", "d"}
Arr2 := []string{"c", "e", "f", "g"}
AddChan := make(chan string)
DelChan := make(chan string)
var wg sync.WaitGroup
wg.Add(2)
go FindinFirst(&Arr1, &Arr2, AddChan, &wg)
go FindinSecond(&Arr2, &Arr1, DelChan, &wg)
counter := 0
for {
select {
case Add, ok := <-AddChan:
if ok == true {
fmt.Println(Add)
} else {
counter += 1
}
case Del, ok := <-DelChan:
if ok == true {
fmt.Println(Del)
} else {
counter += 1
}
}
//if both the channels are closed, we are good, hence exit
if counter == 2 {
break
}
}
}
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报