강의

멘토링

로드맵

Inflearn Community Q&A

done's profile image
done

asked

GO Language Programming Core Basics Introduction Course, Easy and Quick to Complete

Advanced Channel

질문이요

Written on

·

214

1

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 초쯤에 클로저를 백그라운드라고 더한다는게 무슨 말씀이신가요? 클로저를 쓰면 백그라운드 프로그램이 돌듯 돈다는 말 씀이신가요???

go

Quiz

Go 언어의 고루틴이 다른 언어의 스레드와 비교했을 때 가지는 주된 특징은 무엇일까요?

더 많은 메모리를 사용하며 생성 비용이 높습니다.

더 적은 메모리를 사용하며 생성 비용이 낮습니다.

운영체제 스레드와 일대일로 매핑됩니다.

메인 고루틴 종료와 무관하게 항상 실행됩니다.

Answer 3

1

niceman님의 프로필 이미지
niceman
Instructor

안녕하세요. 깊게 공부하시는 것 같아서 보기 좋습니다.

데드락(교착상태)에 걸리는 이유는 서로 다른 고루틴이 실행 완료되기를 기다리는 동안에 채널이 동기화 

되지 않았기 때문입니다.

약간 어려운 부분인데 지금 질문하신 부분에 대한 비슷한 질문이 있어서 검색 후 결과 올려 드립니다.

한 번에 이해가 쉽지 않겠지만, 채널 부터 차근차근 읽어보시기 바랍니다.

크롬으로 한국어 번역후 읽어보셔도 됩니다.

https://stackoverflow.com/questions/5983544/go-channels-and-deadlock

0

고루틴 클로저를 사용하면 tot <- sum과 return tot가 같이 실행되고 있기 때문에 tot가 발신할 곳이 있기 때문에 데드락이 일어나지 않는거구요. 맞는지 궁금합니다 ㅠ

0

tot <- sum 에서 tot가 값을 전달받았는데 아무 데도 줄 수가 없어서 데드락이 일어나는 게 맞나요?

done's profile image
done

asked

Ask a question