设定信号数量,取出、归还,以限制某功能同时允许进入的数量
go get golang.org/x/sync/semaphoreimport (
"golang.org/x/sync/semaphore"
)
var sem = semaphore.NewWeighted(10)
func func1() {
defer sem.Release(1) //结束后归还一个
for sem.TryAcquire(1) == false { //拿取一个
time.Sleep(time2.Millisecond * 200)
}
}
//或
func func2() {
defer sem.Release(1)
var ctx, _cancelFunc = context.WithTimeout(context.Background(), time2.Second*5)
err := sem.Acquire(ctx, 1)
if err != nil {
fmt.Println("没拿到")
}
}