WaitGroup을 사용한 동시 고루틴의 상호 배제
코드에는 실행 중에 서로 간섭 없이 실행해야 하는 3개의 동시 고루틴이 있습니다. 코드의 특정 섹션. 이 개념을 상호 배제라고 하며, 한 번에 하나의 고루틴만 코드의 중요한 섹션을 실행할 수 있도록 보장합니다.
WaitGroup을 사용하여 상호 배제를 달성하려면 다음 단계를 따르세요.
다음은 위 단계를 구현하는 예입니다.
<code class="go">package main import ( "fmt" "sync" ) var ( mutex1 sync.Mutex mutex2 sync.Mutex mutex3 sync.Mutex wg sync.WaitGroup ) func Routine1() { mutex1.Lock() defer mutex1.Unlock() // Do something for i := 0; i < 200; i++ { mutex2.Lock() mutex3.Lock() fmt.Println("value of z") mutex2.Unlock() mutex3.Unlock() } // Do something } func Routine2() { mutex2.Lock() defer mutex2.Unlock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex3.Lock() fmt.Println("value of z") mutex1.Unlock() mutex3.Unlock() } // Do something } func Routine3() { mutex3.Lock() defer mutex3.Unlock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex2.Lock() fmt.Println("value of z") mutex1.Unlock() mutex2.Unlock() } // Do something } func main() { wg.Add(3) go Routine1() go Routine2() go Routine3() wg.Wait() }</code>
이 예에서는 , 각 고루틴의 중요한 섹션은 fmt.Println("value of z")을 실행하는 루프입니다. 뮤텍스는 한 번에 하나의 고루틴만 이 섹션을 실행할 수 있도록 보장합니다. WaitGroup은 메인 고루틴이 종료되기 전에 모든 고루틴이 완료될 때까지 기다리도록 합니다.
위 내용은 WaitGroup을 사용하여 동시 goroutine에서 상호 배제를 어떻게 달성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!