2017-11-23 20 views
-2

official code example는 버퍼링 채널 예를 갈 이해

func sum(s []int, c chan int) { 
    sum := 0 
    for _, v := range s { 
     sum += v 
    } 
    c <- sum // send sum to c 
} 

func main() { 
    s := []int{7, 2, 8, -9, 4, 0} 
    c := make(chan int) 
    go sum(s[:len(s)/2], c) 
    go sum(s[len(s)/2:], c) 
    x := <-c 
    y := <-c 
    fmt.Println(x, y, x+y) 
} 

인쇄 : -5, 17,

(12)는 왜 17, -5, 12 인쇄되지?

나는 x는 17

답변

1

이 값이 먼저 채널에 기록됩니다있는 더 정의 된 순서가 없다, 그것은 스케줄러의 자비에 순전히 있어야한다고 생각합니다. 모든 예제가 수행하는 것처럼 결과를 추가하는 것입니다. 실제로 결과가 어느쪽으로 돌아가는지는 중요하지 않습니다.

0

귀하의 go sum(...) 골 루틴이 어떤 순서로 시작되고 어떤 채널이 끝나고 (채널로 전송되는지) 보장 할 수는 없습니다.