본문 바로가기
Golang

Golang sync.WaitGroup

by 시바도지 2023. 3. 6.
반응형

sync.WaitGroup는 고루틴이 실행되는 동안 다른 고루틴이 모두 종료될 때까지 기다리는 데 사용되는 동기화 기능이다.

WaitGroup은 프로그램이 실행되는 동안 작업이 완료될 때마다 감소하는 카운터를 유지한다.

 

sync.WaitGroup Method

  • func (wg *WaitGroup) Add(delta int) : 대기 그룹에 고루틴 개수 추가
  • func (wg *WaitGroup) Done() : 고루틴이 끝났다는 것을 알려줄 떄 사용
  • func (wg *WaitGroup) Wait() : 모든 고루틴이 끝날 때까지 기다린다.

 

기본적으로 WaitGroup은 0으로 초기화되며, Add(n) 메서드를 사용하여 카운터 값을 증가시킨다.

이후에 Done() 메서드를 사용하여 작업이 완료될 때마다 카운터 값을 감소시킨다. 마지막으로, Wait() 메서드를 호출하면 카운터 값이 0이 될 때까지 대기하게 된다.

 

다음의 예제는 WaitGroup을 사용하여 고루틴이 모두 종료될 때까지 기다리는 예제이다.

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    for i := 1; i <= 5; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Printf("Goroutine %d\\n", i)
        }(i)
    }

    wg.Wait()
    fmt.Println("All goroutines finished executing")
}

위 예제에서는 WaitGroup을 사용하여 각 고루틴이 실행될 때마다 카운터 값을 1씩 증가시키고,

각 고루틴이 종료될 때마다 Done() 메서드를 호출하여 카운터 값을 1씩 감소시킨다.

마지막으로 Wait() 메서드를 호출하여 모든 고루틴이 종료될 때까지 대기한다.

반응형

'Golang' 카테고리의 다른 글

Golang JSON을 CSV로 변환  (0) 2023.03.15
Golang 디렉토리 생성(os.Mkdir, os.MkdirAll)  (0) 2023.03.15
omitempty  (0) 2023.01.10
Golang 문자열 다루기 (strconv, strings)  (0) 2022.12.10
Golang Time  (0) 2022.09.13

댓글