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