使用 sync.Mutex 可以实现 Goroutine 的互斥同步。具体实现步骤如下:
创建一个 Mutex 对象 mu。
在需要进行互斥操作的 Goroutine 中,使用 mu.Lock() 对共享资源进行加锁。
在互斥操作完成后,使用 mu.Unlock() 对共享资源进行解锁。
示例代码如下:
package main
import (
"fmt"
"sync"
"time"
)
var (
counter int
mu sync.Mutex
)
func main() {
for i := 0; i < 10; i++ {
go func() {
mu.Lock()
counter++
fmt.Printf("Incremented: %d\n", counter)
mu.Unlock()
}()
}
time.Sleep(1 * time.Second)
fmt.Printf("Final counter value: %d\n", counter)
}
在上面的示例中,使用了 sync.Mutex 对象 mu 进行了互斥操作。在每个 Goroutine 中,使用 mu.Lock() 对 counter 变量进行加锁操作,然后对其进行自增操作,最后使用 mu.Unlock() 进行解锁。在 main 函数中,通过 sleep 函数等待所有 Goroutine 执行完毕后,输出最终的 counter 值。