2-8.sync.Semaphore的实现
func main() {
urls := []string{"1", "2", "3", "4"}
s := semaphore.NewWeighted(3) // 声明配额为3的信号量
var w sync.WaitGroup
for _, u := range urls {
w.Add(1)
go func(u string) {
s.Acquire(context.Background(), 1) // 占用1个信号量资源
doSomething(u)
s.Release(Weight) // 解除信号量占用
w.Done()
}(u)
}
w.Wait()
fmt.Println("All Done")
}实现原理
总结
Last updated