Mutex
-
无需显式初始化,直接声明变量即可使用。
-
互斥锁,同一时刻只能有一个协程持有锁,不分读写。
| 方法 | 含义 | 说明 |
|---|---|---|
| Lock | 加锁 | |
| Unlock | 解锁 | 未加锁时调用会导致panic |
| TryLock | 尝试加锁 | 立即返回,成功返回true,失败返回false |
RWMutex
-
无需显式初始化,直接声明变量即可使用。
-
读写锁,同一时刻可以有多个协程持有读锁,但是只能有一个协程持有写锁。
-
有写锁时,其他协程无法获取读锁和写锁。
-
有读锁时,其他协程可以获取读锁,但是无法获取写锁。
| 方法 | 含义 | 说明 |
|---|---|---|
| RLock | 加读锁 | |
| RUnlock | 解读锁 | 未加读锁时调用会导致panic |
| TryRLock | 尝试加读锁 | 立即返回,成功返回true,失败返回false |
| Lock | 加写锁 | |
| Unlock | 解写锁 | 未加写锁时调用会导致panic |
| TryLock | 尝试加写锁 | 立即返回,成功返回true,失败返回false |
Map
- 无需显式初始化,直接声明变量即可使用。
| 方法 | 含义 | 说明 |
|---|---|---|
| Store | 存储键值对 | |
| Load | 加载键对应的值 | |
| Delete | 删除键对应的值 | |
| Clear | 清除所有键值对 | |
| Swap | 交换指定键对应的旧值和新值,并返回旧值和操作之前键是否存在 | |
| LoadAndDelete | 加载键对应的值并删除键值对 | |
| LoadOrStore | 加载键对应的值,如果键不存在则存储键值对 | |
| CompareAndDelete | 比较键对应的值是否等于指定值,如果相等则删除键值对 | |
| CompareAndSwap | 比较键对应的值是否等于指定值,如果相等则替换键对应的值 | |
| Range | 遍历键值对 | 传入函数返回false时停止遍历 |
WaitGroup
- 无需显式初始化,直接声明变量即可使用。
| 方法 | 含义 | 说明 |
|---|---|---|
| Add | 添加计数器 | 启动协程前调用,传入协程数量 |
| Done | 减少计数器 | 协程执行完毕后调用 |
| Wait | 等待计数器变为0 |
主协程调用,等待所有协程执行完毕 |
Once
- 无需显式初始化,直接声明变量即可使用。
| 方法 | 含义 | 说明 |
|---|---|---|
| Do | 执行函数 | 传入函数,只会执行一次 |
Pool
-
需显式初始化,为
New指定创建对象的函数。 -
主要目的是缓存已分配但未使用的对象以便后续重用。
-
池中的对象为
临时对象,可能随时消失,不能依赖其中对象一直存在。 -
首次使用后不能被复制。
| 方法 | 含义 | 说明 |
|---|---|---|
| Get | 从池中获取对象 | 无可用对象时会调用New(不为nil)创建一个新对象 |
| Put | 把对象放回池中 |
Cond
-
需显式初始化,指定一个锁。
-
用于协调协程的执行顺序,常用于生产者/消费者模型。
| 方法 | 含义 | 说明 |
|---|---|---|
| Broadcast | 广播唤醒所有等待的协程 | |
| Signal | 唤醒一个等待的协程 | |
| Wait | 将协程持有的锁释放,同时将协程加入等待队列并阻塞协程,等待唤醒 | 调用时必需在循环中检查条件 |
包函数
| 方法 | 含义 | 说明 |
|---|---|---|
| NewCond | 创建一个新的条件变量 | 需指定一个锁 |
| OnceFunc | 创建一个只执行一次的无返回值的函数 | 调用返回函数时,传入函数只会执行一次 |
| OnceValue | 创建一个只执行一次的只有一个返回值的函数 | 调用返回函数时,传入函数只会执行一次 |
| OnceValues | 创建一个只执行一次的有两个返回值的函数 | 调用返回函数时,传入函数只会执行一次 |