package main import ( "context" "fmt" "os" "strconv" "time" "golang.org/x/sync/semaphore" ) func worker(n int) int { square := n * n time.Sleep(time.Second) return square } func main() { if len(os.Args) != 2 { fmt.Println("Need #jobs!") os.Exit(1) } var workers = 4 var sem = semaphore.NewWeighted(int64(workers)) nJobs, err := strconv.Atoi(os.Args[1]) if err != nil { fmt.Println(err) os.Exit(1) } // Where to store the results var results = make([]int, nJobs) // Needed by Acquire() ctx := context.TODO() for i := range results { err = sem.Acquire(ctx, 1) if err != nil { fmt.Println("Cannot acquire semaphore:", err) break } go func(i int) { defer sem.Release(1) temp := worker(i) results[i] = temp }(i) } err = sem.Acquire(ctx, int64(workers)) if err != nil { fmt.Println(err) } for i, v := range results { fmt.Println(i, "->", v) } }
zzh@ZZHPC:/zdata/Github/ztest$ go run main.go 5 0 -> 0 1 -> 1 2 -> 4 3 -> 9 4 -> 16
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2023-06-13 Python - collections.Counter()
2023-06-13 Python - fibonacci