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()会阻塞代码的运行,直到计数器地值减为0Once(只执行一次动作的对象)
示例
利用sync.Mutex实现对共享变量的互斥访问,利用sync.WaitGroup实现等待各协程运行结束
1 | package main |