sync包
sync包提供了基本的同步基元,如互斥锁。除了Once
和WaitGroup
类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。
互斥锁Mutex
1 | type Mutex struct { |
Mutex
是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex
类型的锁和线程无关,可以由不同的线程加锁和解锁。
其他类型的同步单元
sync包除了提供互斥锁,还提供了
- 读写锁
RWMutex
- 条件变量
Cond
WaitGroup
:WaitGroup
对象内部有一个计数器,最初从0开始,它有三个方法:Add(), Done(), Wait()
用来控制计数器的数量。Add(n)
把计数器设置为n
,Done()
每次把计数器-1
,wait()
会阻塞代码的运行,直到计数器地值减为0
Once
(只执行一次动作的对象)
示例
利用sync.Mutex
实现对共享变量的互斥访问,利用sync.WaitGroup
实现等待各协程运行结束
1 | package main |