2014-03-04 3 views
0

for 루프에서 go 서브 루틴의 동작에 대한 나의 이해가 의심 스럽습니다. 우리가 for 루프 때 내가 이해하는 바로는GO - for 루프에서의 서브 루틴 동작

:지도가 어디

for key := range Map { 
    go subroutine(Map[key]) 
} 

는의 3 (키, 값) 쌍을 가정 해 봅시다.

그래서 나의 이해는 서브 루틴() 기능은 모든 맵 [키] 값은 서브 루틴, 즉 (맵 [키 1), 서브 루틴 (맵 [키 2을])를 사용하여 동시에 실행하는 것입니다 및 서브 루틴 (Map [key3])이 모두 동시에 실행됩니까?

for 루프의 동시 서브 루틴에 대한 나의 이해가 올바른가요?

감사합니다.

+3

예/아니오 답변 외에 무엇을 원하십니까? (대답은 그렇다). – nos

+0

이해가 부족한 경우 확인 또는 수정을 원했습니다. 고맙습니다! – sSmacKk

+1

예 그리고 서브 루틴이 완료되기를 기다리는 아무 것도없는 경우 서브 루틴이 완료되기 전에 종료 할 수 있습니다/ – Krut

답변

1

예. 프로그램이 끝나기 전에 끝내기 위해 여전히 주요 골 루틴이 살아 있어야합니다.

wg := new(sync.WaitGroup) 
for key := range Map { 
    wg.Add(1) 
    go func() { 
    subroutine(Map[key]) 
    wg.Done() 
    } 
} 
wg.Wait() 

을 아니면 서버 루프는 메인 루틴에서 진행 같은이있는 경우 관련 신호가 될 때까지 프로그램이 완료되지 않습니다 전혀 때문에 것을 필요로하지 않을 수 있습니다 : 당신은 sync.WaitGroup 같은 것을 사용할 수 있습니다 외부로 보내졌다.

희망이 있습니다.