package main import ( "fmt" "time" ) func writedata(intchan chan int) { for i:=1;i<=50;i++{ intchan<-i fmt.println("写:",i) time.sleep(time.millisecond*100) } close(intchan) //写完后关闭管道 } func readdata(intchan chan int,exitchan chan bool) { for{ v,ok:=<-intchan if !ok{ fmt.println("读取完毕") break } fmt.println("读:",v) } //设置全局标志 告诉main 读取完毕了 main主线程可以关闭了 exitchan<-true close(exitchan) } func main() { intchan :=make(chan int,50) exitchan:=make(chan bool,1) go writedata(intchan) go readdata(intchan,exitchan) //阻塞主线程 for ok:=range exitchan{ fmt.println(ok) } }
func notice(d time.duration) chan bool { c := make(chan bool, 1) go func() { time.sleep(d) //定时 c <- true }() close(c) return c } func main() { log.println("one") <-notice(time.second) //管道没有写则阻塞 log.println("tow") <-notice(time.second) log.println("three") }
package main import ( "log" "time" ) var counter=0 func increase1000(id int,done chan bool,mutex chan bool){ for i:=0;i<1000;i++{ mutex<-true //加锁 counter+=1 time.sleep(time.microsecond) <-mutex //解锁 } done<-true } func main() { mutex,done:=make(chan bool,1),make(chan bool) go increase1000(1,done,mutex) go increase1000(2,done,mutex) <-done;<-done log.println(counter) }
如对本文有疑问, 点击进行留言回复!!
VSCode1.4 搭建Golang的开发调试环境(遇到很多问题)
网友评论