1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| func deadlock1() { //无缓冲channel只写不读 ch := make(chan int) ch <- 3 // 这里会发生一直阻塞的情况,执行不到下面一句 } func deadlock2() { //无缓冲channel读在写后面 ch := make(chan int) ch <- 3 // 这里会发生一直阻塞的情况,执行不到下面一句 num := <-ch fmt.Println("num=", num) } func deadlock3() { //无缓冲channel读在写后面 ch := make(chan int) ch <- 100 // 这里会发生一直阻塞的情况,执行不到下面一句 go func() { num := <-ch fmt.Println("num=", num) }() time.Sleep(time.Second) } func deadlock3() { //有缓冲channel写入超过缓冲区数量 ch := make(chan int, 3) ch <- 3 ch <- 4 ch <- 5 ch <- 6 // 这里会发生一直阻塞的情况 } func deadlock4() { //空读 ch := make(chan int) // ch := make(chan int, 1) fmt.Println(<-ch) // 这里会发生一直阻塞的情况 } func deadlock5() { //互相等对方造成死锁 ch1 := make(chan int) ch2 := make(chan int) go func() { for { select { case num := <-ch1: fmt.Println("num=", num) ch2 <- 100 } } }() for { select { case num := <-ch2: fmt.Println("num=", num) ch1 <- 300 } } }
|