강의로 돌아가기
modolee

채널 변수 c를 하나만 사용할 경우 원하는 결과가 나오지 않습니다.

안녕하세요. 강의 잘 보며 공부하고 있습니다.^

2개의 go routine을 실행하는데, 채널을 하나만 사용해서 값을 받아오게 되어 있습니다.
하나의 c를 이용해서 go routine에서 반환하는 값을 처리합니다.
이때 어떤 go routine이 먼저 끝나느냐에 따라서 x, y 에 들어가는 순서가 변경되는 것 같습니다.
그래서 원하는 결과와 반대의 결과가 나오고 있습니다.
그래서 채널 변수를 2개로 만들어서 각각 저장하고 사용하는게 더 올바른 사용법이 아닌가 생각되는데,
어떤 것이 맞는 것인지 답변 부탁드리겠습니다.

감사합니다.

작성중인 코드―channel.GO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import "fmt"

// 배열 s에 모든 원소를 더해, 채널 c에게 전달하는 함수
func sum(s []int, c chan int) {
    sum := 0
    for _, v := range s {
        sum += v
    }
    c <- sum // c에게 sum을 전달
}

func main() {
    s := []int{7, 2, 8, -9, 4, 0}

    c1 := make(chan int)
    c2 := make(chan int)
    go sum(s[:len(s)/2], c1)
    go sum(s[len(s)/2:], c2)
    x, y := <-c1, <-c2 // c로부터 값을 전달받음

    fmt.Println("sum(s[:len(s)/2], c1)의 결과:", x)
    fmt.Println("sum(s[len(s)/2:], c2)의 결과:", y)
    fmt.Println("둘의 합:", x+y)
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.