Administrator
Administrator
发布于 2026-08-25 / 0 阅读
0
0

semaphore信号量

设定信号数量,取出、归还,以限制某功能同时允许进入的数量

go get golang.org/x/sync/semaphore
import (
	"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("没拿到")
	}
}


评论