sync.Mutex是什么
时间: 2023-12-03 18:03:51 浏览: 30
`.Mutex` 是 Go 语言标准库 `sync` 包中的一种同步原语,用于实现互斥锁(Mutex)。互斥锁是一种常用的并发控制机制,用于保护临界区代码,在同一时间只允许一个线程或 goroutine 进入临界区执行。
`sync.Mutex` 是一个结构体类型,它包含了互斥锁的状态和相关的方法。通过使用互斥锁,可以确保在同一时间只有一个 goroutine 能够获取锁,并执行被保护的临界区代码。
下面是一个使用 `sync.Mutex` 的简单示例:
```go
package main
import (
"fmt"
"sync"
)
var counter int
var mutex sync.Mutex
func increment() {
mutex.Lock() // 获取互斥锁
defer mutex.Unlock() // 在函数退出时释放互斥锁
counter++
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
increment()
}()
}
wg.Wait()
fmt.Println("Final counter value:", counter)
}
```
在上面的示例中,我们定义了一个全局变量 `counter` 和一个 `sync.Mutex` 类型的变量 `mutex`。在 `increment` 函数中,我们首先通过调用 `mutex.Lock()` 来获取互斥锁,然后执行 `counter++` 以增加计数器的值,最后在函数退出时调用 `mutex.Unlock()` 来释放互斥锁。
在主函数中,我们启动了 10 个 goroutine 来并发地调用 `increment` 函数。通过使用互斥锁,我们确保每次只有一个 goroutine 能够获取互斥锁并执行临界区代码,从而避免了竞态条件(race condition)。
`sync.Mutex` 在并发编程中是一个常用的工具,可以有效地保护共享资源的访问。当多个 goroutine 需要访问同一临界区时,使用互斥锁可以确保线程安全,并避免数据竞争。
希望以上解释对你有帮助!如有任何进一步的问题,请随时提问。