상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Go 언어의 `sync.WaitGroup`은 어떤 용도로 사용되나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Go 언어의 `sync.WaitGroup`은 고루틴(goroutine) 간의 동기화를 관리하기 위해 사용되는 <a href='https://sangseek.com/sangseeks/구조체/ko'>구조체</a>입니다. 여러 개의 고루틴이 동시에 실행될 때, 특정 작업이 모두 완료될 때까지 기다리거나, 특정 조건이 충족될 때까지 대기해야 할 필요가 있을 때 유용합니다. `WaitGroup`은 이러한 동기화 작업을 간편하게 처리할 수 있도록 도와줍니다. <a href='https://sangseek.com/sangseeks/기본 개념/ko'>기본 개념</a> `WaitGroup`은 다음과 같은 세 가지 주요 메서드를 제공합니다: 1. Add(int) : 대기할 고루틴의 수를 설정합니다. 이 메서드는 대기할 고루틴의 수를 증가시키거나 감소시킬 수 있습니다. 예를 들어, 새로운 고루틴을 시작할 때마다 `Add(1)`을 호출하고, 고루틴이 완료되면 `Done()`을 호출하여 카운트를 감소시킵니다. 2. Done() : 고루틴이 작업을 완료했음을 알리는 메서드입니다. 이 메서드를 호출하면 `WaitGroup`의 카운트가 1 감소합니다. 3. Wait() : 모든 고루틴이 완료될 때까지 대기하는 메서드입니다. 이 메서드는 `Add()`로 설정된 카운트가 0이 될 때까지 블록(block)됩니다. 사용 예시 다음은 `sync.WaitGroup`을 사용하는 간단한 예제입니다: ```go package main import ( "fmt" "sync" "time" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() // 작업이 끝나면 Done() 호출 fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) // 작업 시뮬레이션 fmt.Printf("Worker %d done\n", id) } func main() { var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) // 새로운 고루틴 추가 go worker(i, &wg) // 고루틴 시작 } wg.Wait() // 모든 고루틴이 완료될 때까지 대기 fmt.Println("All workers done") } ``` 위의 예제에서 `worker` 함수는 고루틴으로 실행되며, 각 고루틴이 시작될 때 `wg.Add(1)`을 호출하여 대기할 고루틴의 수를 증가시킵니다. 고루틴이 작업을 완료하면 `wg.Done()`을 호출하여 카운트를 감소시킵니다. `main` 함수에서는 `wg.Wait()`을 호출하여 모든 고루틴이 완료될 때까지 대기합니다. 주의사항 - 스레드 안전성 : `WaitGroup`은 내부적으로 스레드 안전하게 설계되어 있어 여러 고루틴에서 동시에 `Add`, `Done`, `Wait` 메서드를 호출해도 안전합니다. - 카운트 관리 : `Add` 메서드는 음수 값을 허용하지 않으며, 카운트가 0보다 작아지면 패닉이 발생합니다. 따라서 고루틴의 수를 정확하게 관리하는 것이 중요합니다. - Wait 호출 후 : `Wait` 메서드를 호출한 후에는 `Add` 또는 `Done`을 호출하면 안 됩니다. 이는 정의된 <a href='https://sangseek.com/sangseeks/동작/ko'>동작</a>이 아니며, 프로그램이 패닉을 일으킬 수 있습니다. 결론 `sync.WaitGroup`은 Go 언어에서 고루틴 간의 동기화를 간편하게 처리할 수 있는 강력한 도구입니다. 여러 고루틴이 동시에 실행되는 환경에서 작업의 완료를 기다리거나, 특정 조건이 충족될 때까지 대기해야 할 경우에 매우 유용합니다. 이를 통해 개발자는 복잡한 동기화 로직을 간소화하고, 코드의 가독성과 유지보수성을 높일 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기