go waitGroup

김새우·2022년 12월 5일
0

go

목록 보기
12/13

대기 그룹

대기그룹 -> 고루틴이 모두 끝날때까지 기다림

  • sync.WaitGroup
  • func(wg *WaitGroup) Add(delta int) : 대기 그룹에 고루틴 개수 추가
  • func(wg *WaitGroup) Done() : 대기 그룹이 끝남을 알려줄때 사용
  • func(wg *WaitGroup) Wait() : 모든 고루틴이 끝날때까지 기다림
func main() {
	runtime.GOMAXPROCS(runtime.NumCPU()) // 모든 CPU tkdyd

	wg:= new(sync.WaitGroup) //대기그룹 생성

	for i:=0; i<10; i++ {
		wg.Add(1) // 반복할때마다 wg.Add함수로 1씩 추가
		go func(n int) {	 //고루틴 10개 생성
			fmt.Println(n)
			wg.Done() //고루틴이 끝남을 알려줌
		}(i)
	}

	wg.Wait() //고루틴이 끝날때까지 기다림
	fmt.Println("the end")
}

Add함수와 Done 함수는 호출 횟수가 같아야함
Done 함수는 defer와 함께 사용하여 지연 호출로도 사용 가능

0개의 댓글