golang mutex举例
时间: 2024-01-04 17:01:11 浏览: 25
Golang的mutex(互斥锁)是用来保护共享资源的一种机制。当多个goroutine同时访问一个共享资源时,可能会导致数据竞争(data race),因此需要使用mutex来进行同步。下面以一个简单的例子来说明mutex的使用。
假设有一个共享的计数器counter,多个goroutine同时对其进行访问和修改。若不使用mutex进行同步,则可能会导致counter的值出现错误。
在Golang中,我们可以使用sync包中的Mutex类型来创建互斥锁。首先,我们需要创建一个Mutex对象:
```
var mutex sync.Mutex
```
然后,在对counter进行读写操作之前,我们需要先锁定mutex,这样其他goroutine就无法同时访问counter了:
```
mutex.Lock()
```
在操作完成后,我们需要解锁mutex,以允许其他goroutine继续访问counter:
```
mutex.Unlock()
```
下面是一个简单的例子:
```go
package main
import (
"fmt"
"sync"
"time"
)
var counter int
var mutex sync.Mutex
func increment() {
mutex.Lock()
defer mutex.Unlock()
counter++
fmt.Println("Counter:", counter)
}
func main() {
for i := 0; i < 10; i++ {
go increment()
}
time.Sleep(time.Second) // 等待goroutine完成
fmt.Println("Final Counter:", counter)
}
```
运行以上代码,我们可以看到每个goroutine对counter进行了递增操作,并且经过互斥锁的保护,最终得到了正确的计数结果。
通过使用mutex,我们可以确保共享资源的安全访问,避免了数据竞争的问题。但是需要注意,过多地使用mutex可能会导致性能下降,因此应该根据实际情况来决定是否需要使用互斥锁。