질문이요
220
작성한 질문수 92
func sum(cnt int) <-chan int{
sum:=0
tot:=make(chan int)
for i:=1; i<cnt; i++{
sum+=i
}
tot <- sum
return tot
//go func(){
// for i:=1; i<cnt; i++{
// sum+=i
// }
// tot<-sum
//}()
//return tot
}
func main(){
/*
채널
채널 또한 함수의 반환 값으로 사용가
*/
c:=sum(100)
fmt.Println(<-c)
}
클로저를 안쓰면 왜 데드락에 걸릴까요...??
13:32 초쯤에 클로저를 백그라운드라고 더한다는게 무슨 말씀이신가요? 클로저를 쓰면 백그라운드 프로그램이 돌듯 돈다는 말 씀이신가요???
답변 3
1
안녕하세요. 깊게 공부하시는 것 같아서 보기 좋습니다.
데드락(교착상태)에 걸리는 이유는 서로 다른 고루틴이 실행 완료되기를 기다리는 동안에 채널이 동기화
되지 않았기 때문입니다.
약간 어려운 부분인데 지금 질문하신 부분에 대한 비슷한 질문이 있어서 검색 후 결과 올려 드립니다.
한 번에 이해가 쉽지 않겠지만, 채널 부터 차근차근 읽어보시기 바랍니다.
크롬으로 한국어 번역후 읽어보셔도 됩니다.
https://stackoverflow.com/questions/5983544/go-channels-and-deadlock
0
고루틴 클로저를 사용하면 tot <- sum과 return tot가 같이 실행되고 있기 때문에 tot가 발신할 곳이 있기 때문에 데드락이 일어나지 않는거구요. 맞는지 궁금합니다 ㅠ
고 인터페이스 관련
0
69
2
Join함수 사용이유가 궁금합니다
0
54
1
vscode 설정
0
126
2
arm64
0
202
2
undefined 에러 : UndeclaredImportedName
0
343
1
godoc 에러 관련
0
206
1
package is not in std 오류
0
986
1
맵 예제 코드가 바이러스 검사에 걸려요
0
234
1
for 반복문에서 break와 continue 차이점
0
224
1
후치연산 관련 질문입니다.
0
197
1
package관리에 질문이 있습니다.
0
282
1
go channel 에제에서 질문이 있습니다.
0
193
1
golang 질문
0
310
1
재귀 함수 관련하여 질문이 있습니다.
0
346
1
atom 서비스 종료 관련
0
403
1
vscode 환경설정 업데이트 부탁드립니다
1
405
2
waitGroup.Done을 지연 시키는 방식
0
450
1
첫 번째 예제 질문있습니다.
0
263
1
2개씩 체크가 되는 이유가 궁금합니다.
0
328
1
go 표준 코드 컨벤션이 있나요?
0
825
1
slice에서 make 궁금한 게 있습니다.
1
262
1
import 관리는 어떻게 하나요?
0
317
1
개발환경설정 질문드립니다.
0
486
1
이것도 closure인가요?
0
238
1





