goroutine deadlock

2020. 4. 1. 17:53golang/golang-grammar

deadlock

deadlock이란 다른 두 작업이 서로 종료될 때까지 기다리다가 결국엔 아무것도 못하는 상태이다. 

channel을 사용하다 보면 가장 중요하게 고려해볼만 한 것이 Deadlock이다. 

 

만약 goroutine이 channel을 통해 data를 보내게 되고 그러고 나서 다른 goroutine으로 부터 데이터를 받기를 기다리고 있다. 하지만 값을 받지 못하게 된다면 deadlock이 발생하게 됩니다. 

 

비슷하게 groutine이 channel로 부터 값을 받기 기다린다고 몇몇의 다른 goroutine channel을 통해 data를 쓰는 것을 기대하게된다. 그러면 panic이 발생한다.

package main


func main() {  
    ch := make(chan int)
    ch <- 5
}

위 코드에서는 deadlock error가 발생한다. 왜냐하면 Channel에 send를 해주었는데 아무도 receiving을 해주지 못하기 때문에 run time error가 발생한다.

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:  
main.main()  
    /tmp/sandbox249677995/main.go:6 +0x80