Golang如何使用 sync.Mutex 进行 Goroutine 的互斥同步?

使用 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 值。