2013-03-20 2 views
1

저는 GO의 새로운 기능입니다. 버퍼링 된 채널에서 프로그램은 다음과 같습니다.이 프로그램이 출력되는 이유는 무엇입니까?

package main 

import "fmt" 
import "time" 

func main() { 
    c := make(chan int, 2) 
    c <- 1 
    fmt.Println(<-c) 
    time.Sleep(1000 * time.Millisecond) 
    c <- 2  
    fmt.Println(<-c) 
} 

출력을 생성합니다. 그러나 http://tour.golang.org/#64에 따라 메시지 : 버퍼가 가득 때만

가 버퍼링 채널로 전송 블록. 버퍼가 비어있을 때 블록을받습니다.

FULL 왜 프로그램은 첫 번째 문에서 최대 전체에 c 대신 대기 무한대의 출력을 생성 않는 경우에만 보내라고한다. ?

답변

6

채널의 버퍼 크기는 2입니다. 하나의 int를 집어 넣은 다음 하나의 int를 집어 넣습니다. 그런 다음 잠자고 과정을 반복하십시오. int를 꺼내지 않고 세 번째 int를 삽입하려고 시도 할 때까지 채널이 차단되지 않습니다. 처음 두 int는 버퍼링됩니다.

6

슬라이드를 제대로 이해하지 못했을 것입니다. "차단 만"이라고 말하면 "작업 전용"이라고 말합니다. 슬라이드 말했다 무엇

입니다 : 버퍼가 가득하지

  • 경우, 다음 전송이 제대로 작동하고 버퍼가 그런 다음, 전송 가득 찬 경우가

  • 을 차단하지 않습니다 버퍼가 꽉 찰 때까지 차단됩니다.

귀하의 예는 지정된대로 작동합니다.

관련 문제