반응형
2022.10.05 - [Study/Go 언어] - [golang] 채널(channel) 기본 문법
# 주의할 점
1) 채널이 꽉 찼을 경우
예를 들어보자
ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3
ch <- 4
fmt.Println("finish")
위에 만든 채널에 1, 2, 3을 넣었다. 그래서 채널이 꽉 찼다. 이 상태에서 4를 넣으면 어떻게 될까?
결괏값
fatal error: all goroutines are asleep - deadlock!
채널이 꽉 차서 4는 send를 하기 위해서 계속 대기를 한다.
그래서 finish가 출력되지 않고 프로그램이 비정상적으로 종료된다.
2) 채널이 비어 있는 경우
예를 들어보자
ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3
<-ch
<-ch
<-ch
<-ch //채널에 값을 가져올 수 없어서 무한 대기
fmt.Println("finish")
채널에 1, 2, 3을 넣는다. 그리고 채널을 4번 뺀다. 그럼 어떻게 될까?
결과값
fatal error: all goroutines are asleep - deadlock!
4번째 호출을 했을 때 채널 안에 값이 없어서 가져올 수 없는 상황이다.
그래서 무한 대기를 타다가 비정상적으로 종료가 된다.
# 참조
https://github.com/YooGenie/go-study/issues/42
반응형
'Study > Go 언어' 카테고리의 다른 글
[golang] 고루틴(goroutine) 기본 문법 (0) | 2022.10.09 |
---|---|
[golang] 채널(channel) blocking 해결 방법 (0) | 2022.10.07 |
[golang] 채널(channel) 기본 문법 (0) | 2022.10.05 |
[Golang] XORM에서 this is incompatible with DISTINCT 에러 메시지 발생 (0) | 2022.09.23 |
[error] sql: expected 2 destination arguments in Scan, not 1 에러메시지 해결책 (0) | 2022.08.04 |