萌新想请教一个问题

523804554 · · 2250 次点击
package main import ( "fmt" ) func Recv(ch <-chan int, lock chan<- bool) { for value := range ch { fmt.Println(value) } lock <- true } func Send(ch chan<- int) { for i := 0; i < 5; i++ { ch <- i } close(ch) } func main() { ch := make(chan int) lock := make(chan bool) go Recv(ch, lock) go Send(ch) go Recv(ch, lock) <-lock } 这里的lock有两个作用。1:无缓冲channel作为所有这三个go程的开工信号 <-lock先于lock <- true执行 2:无缓冲channel等待所有子go程结束。
#1
更多评论
**代码的正确粘贴方式:*** ``` package main import ( "fmt" ) func Recv(ch <-chan int, lock chan<- bool) { for value := range ch { fmt.Println(value) } lock <- true } func Send(ch chan<- int) { for i := 0; i < 5; i++ { ch <- i } close(ch) } func main() { ch := make(chan int) lock := make(chan bool) go Recv(ch, lock) go Send(ch) go Recv(ch, lock) <-lock } ```
#2