Go语言 之死锁
package main import ( "fmt" ) func main() { c := make(chan int) c <- 6 fmt.Println("send") go func() { a := <-c fmt.Println(a) }() fmt.Println("over") //fatal error: all goroutines are asleep - deadlock! }
上面例子中把创建协程放在发送通道数据前可以正常运行。
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。