외부 함수로 sync.WaitGroup 활용 모범 사례
제공된 코드 조각에서 동기화를 활용하려고 하면 교착 상태가 발생합니다. .WaitGroup 외부 기능이 있습니다. 이 오류는 WaitGroup의 복사본을 외부 함수에 잘못 전달하여 Done() 메서드가 의도한 WaitGroup에서 호출되지 않는 데서 발생합니다.
이 문제를 해결하려면 대신 WaitGroup을 사용하세요. 이렇게 하면 외부 함수가 올바른 WaitGroup에 액세스하고 적절하게 Done()을 호출할 수 있습니다. 수정된 코드는 다음과 같습니다.
<code class="go">package main import ( "fmt" "sync" ) func main() { ch := make(chan int) var wg sync.WaitGroup wg.Add(2) go Print(ch, &wg) // Pass a pointer to the WaitGroup go func() { for i := 1; i <= 11; i++ { ch <- i } close(ch) defer wg.Done() }() wg.Wait() // Wait for both goroutines to finish } func Print(ch <-chan int, wg *sync.WaitGroup) { for n := range ch { // Read from the channel until it's closed fmt.Println(n) } defer wg.Done() }</code>
또는 아래와 같이 Print 함수의 서명을 수정하여 WaitGroup 매개변수를 제거할 수 있습니다.
<code class="go">func Print(ch <-chan int) { for n := range ch { // Read from the channel until it's closed fmt.Println(n) } }</code>
이 경우 Print 함수는 완료되면 WaitGroup을 닫는 일을 담당합니다. 이 접근 방식은 외부 기능이 WaitGroup에 직접 액세스할 필요가 없는 시나리오에서 바람직합니다.
위 내용은 외부 함수와 함께 `sync.WaitGroup`을 사용하면 교착 상태가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!