使用互斥锁实现并发 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中文网其他相关文章!