GO 语言 sync包
时间: 2023-08-02 17:13:56 浏览: 144
GO语言包(golang)
4星 · 用户满意度95%
Go语言中的sync包提供了基本的同步原语,如互斥锁、读写锁、条件变量等,能够帮助开发者实现并发安全的程序。
常用的sync包中的类型有:
- Mutex:互斥锁,一次只能有一个 goroutine 获得锁并访问共享资源。
- RWMutex:读写锁,多个 goroutine 可以同时获得读锁,但只有一个 goroutine 可以获得写锁。
- WaitGroup:等待组,可以等待一组 goroutine 完成。
- Cond:条件变量,可以在 goroutine 之间传递信号和数据。
下面是一个使用 Mutex 实现互斥访问共享资源的例子:
```
package main
import (
"fmt"
"sync"
)
var (
counter int
mutex sync.Mutex
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
mutex.Lock()
counter++
mutex.Unlock()
wg.Done()
}()
}
wg.Wait()
fmt.Println(counter)
}
```
在上面的例子中,通过创建一个 Mutex 变量来保护共享资源 counter,使用 Lock 和 Unlock 方法对资源进行加锁和解锁操作。在每个 goroutine 中执行操作之前,需要先获取锁,执行完成之后再释放锁。最终输出结果为 1000,说明共享资源被正确地访问和更新。
阅读全文