使用互斥鎖實現並發Goroutines 的互斥
在程式碼中,您希望確保每個Goroutine 中的特定程式碼部分獨立執行。這可以防止其他 goroutine 同時執行這些部分。以下是如何使用互斥鎖來實現互斥:
提供的程式碼大綱示範了 goroutine 的流程以及互斥的必要性。當某個 Goroutine 中正在執行某些事件時,您希望防止執行傳遞到其他 Goroutine。
為了實現這一點,可以使用互斥鎖。互斥體確保在任何給定時間只有一個 goroutine 可以存取共享資源。這是程式碼的稍微修改版本,它利用互斥體進行互斥:
<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>
以下是此更新後的程式碼如何實現互斥:
此實作確保每個 goroutine 中指定的程式碼段獨立執行,防止其他 goroutine 同時執行。
以上是如何使用互斥鎖來實現並發 Goroutine 中的互斥?的詳細內容。更多資訊請關注PHP中文網其他相關文章!