MST

星途 面试题库

面试题:Go中如何基于信号量实现简单的并发任务限流

假设你有一个任务函数 `task`,现在需要使用Go的信号量机制来限制同时执行 `task` 的并发数为5,写出具体的实现代码。
38.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sync"
    "time"
)

func task(id int) {
    fmt.Printf("Task %d is running\n", id)
    time.Sleep(2 * time.Second)
    fmt.Printf("Task %d is done\n", id)
}

func main() {
    var wg sync.WaitGroup
    semaphore := make(chan struct{}, 5)

    for i := 1; i <= 10; i++ {
        wg.Add(1)
        semaphore <- struct{}{}
        go func(id int) {
            defer func() {
                <-semaphore
                wg.Done()
            }()
            task(id)
        }(i)
    }

    wg.Wait()
}