뮤텍스 잠금을 사용한 동시 고루틴의 상호 제외
코드에서 각 고루틴의 특정 코드 섹션이 격리되어 실행되는지 확인하려고 합니다. . 이는 다른 고루틴에 의한 이러한 섹션의 동시 실행을 방지합니다. 다음은 뮤텍스 잠금을 사용하여 상호 배제를 달성할 수 있는 방법입니다.
제공된 코드 개요는 고루틴의 흐름과 상호 배제의 필요성을 보여줍니다. 하나의 고루틴에서 특정 이벤트가 실행되는 동안 실행이 다른 고루틴으로 전달되는 것을 방지하고 싶습니다.
이를 구현하려면 뮤텍스 잠금을 사용할 수 있습니다. 뮤텍스는 주어진 시간에 단 하나의 고루틴만이 공유 리소스에 액세스할 수 있도록 보장합니다. 다음은 상호 배제를 위해 뮤텍스를 활용하는 코드의 약간 수정된 버전입니다.
<code class="go">package main import ( "fmt" "rand" "sync" ) var ( mutex1, mutex2, mutex3 sync.Mutex wg sync.WaitGroup ) func Routine1() { mutex1.Lock() // Do something for i := 0; i < 200; i++ { mutex2.Lock() mutex3.Lock() fmt.Println("Value of z") mutex2.Unlock() mutex3.Unlock() } // Do something mutex1.Unlock() wg.Done() } func Routine2() { mutex2.Lock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex3.Lock() fmt.Println("Value of z") mutex1.Unlock() mutex3.Unlock() } // Do something mutex2.Unlock() wg.Done() } func Routine3() { mutex3.Lock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex2.Lock() fmt.Println("Value of z") mutex1.Unlock() mutex2.Unlock() } // Do something mutex3.Unlock() wg.Done() } func main() { wg.Add(3) go Routine1() go Routine2() Routine3() wg.Wait() }</code>
이 업데이트된 코드가 상호 배제를 달성하는 방법은 다음과 같습니다.
이 구현은 각 고루틴의 지정된 코드 섹션이 독립적으로 실행되도록 보장하여 다른 고루틴의 동시 실행을 방지합니다.
위 내용은 동시 고루틴에서 상호 배제를 달성하기 위해 Mutex Lock을 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!