semaphore
带权重的信号量 golang/sync/semaphore.Weighted,我们可以按照不同的权重对资源的访问进行管理,这个结构体对外也只暴露了四个方法:
golang/sync/semaphore.NewWeighted 用于创建新的信号量;
golang/sync/semaphore.Weighted.Acquire 阻塞地获取指定权重的资源,如果当前没有空闲资源,会陷入休眠等待;
golang/sync/semaphore.Weighted.TryAcquire 非阻塞地获取指定权重的资源,如果当前没有空闲资源,会直接返回 false;
golang/sync/semaphore.Weighted.Release 用于释放指定权重的资源;
结构体
golang/sync/semaphore.NewWeighted 方法能根据传入的最大权重创建一个指向 golang/sync/semaphore.Weighted 结构体的指针:
func NewWeighted(n int64) *Weighted {
w := &Weighted{size: n}
return w
}
type Weighted struct {
size int64
cur int64
mu sync.Mutex
waiters list.List
}