sync.Mutex
时间: 2023-07-27 12:09:05 浏览: 45
sync.Mutex是Go语言标准库中提供的一种互斥锁。互斥锁是一种保证多个Goroutine并发访问共享资源时,同一时刻只有一个Goroutine能够访问的机制。在Go语言中,sync.Mutex是最基本的一种锁。
sync.Mutex提供了两个方法:Lock和Unlock。当一个Goroutine调用了Mutex的Lock方法后,其他Goroutine将无法再调用该Mutex的Lock方法,直到该Goroutine调用了Unlock方法释放了该Mutex,其他Goroutine才能够再次调用该Mutex的Lock方法。
下面是一个使用sync.Mutex实现并发安全计数器的示例代码:
```
package main
import (
"fmt"
"sync"
)
type Counter struct {
count int
mu sync.Mutex
}
func (c *Counter) Inc() {
c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
func (c *Counter) Value() int {
c.mu.Lock()
defer c.mu.Unlock()
return c.count
}
func main() {
var wg sync.WaitGroup
c := Counter{count: 0, mu: sync.Mutex{}}
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
c.Inc()
}()
}
wg.Wait()
fmt.Println(c.Value())
}
```
在上面的代码中,Counter类型包含了一个int类型的计数器和一个sync.Mutex类型的互斥锁。在Incr方法和Value方法中,我们都使用了Lock和Unlock方法来保证多个Goroutine并发访问计数器时的安全性。在main函数中,我们启动了1000个Goroutine来对计数器进行自增操作,并在最后输出了计数器的值。