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
}

posted @ 2022-03-16 15:02  wangzhilei  阅读(101)  评论(0编辑  收藏  举报