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 | 创建一个只执行一次的有两个返回值的函数 | 调用返回函数 时,传入函数 只会执行一次 |