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 關注
- 118 瀏覽
添加回答
舉報