Weighted provides a way to bound concurrent access to a resource. The callers can request access with a given weight.
type Weighted struct {
// contains filtered or unexported fields
}
func NewWeighted(n int64) *Weighted
NewWeighted creates a new weighted semaphore with the given maximum combined weight for concurrent access.
func (s *Weighted) Acquire(ctx context.Context, n int64) error
Acquire acquires the semaphore with a weight of n, blocking until resources are available or ctx is done. On success, returns nil. On failure, returns ctx.Err() and leaves the semaphore unchanged.
func (s *Weighted) Release(n int64)
Release releases the semaphore with a weight of n.
func (s *Weighted) TryAcquire(n int64) bool
TryAcquire acquires the semaphore with a weight of n without blocking. On success, returns true. On failure, returns false and leaves the semaphore unchanged.