首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发任务,但仅适用于不同类型的任务

并发任务,但仅适用于不同类型的任务
EN

Stack Overflow用户
提问于 2021-02-02 16:50:14
回答 1查看 50关注 0票数 0

在下面的用例中,我很难识别正确的并发模式。

我有一个服务,它有一个要执行的计算任务列表:

  • --有些任务执行速度快(几秒),另一些任务执行速度快(几秒钟)

当然,我不介意使用外部库。

我看过singleflight,但这似乎是针对缓存的,在此任务完成计算之前,任务的新执行将被阻止。在我的例子中,我想记录它已经在计算的事实,但放弃新的执行(或者干脆不执行)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-02 17:41:34

维护正在进行的任务地图。添加任务时,检查map并记录任务是否正在进行;将任务添加到映射中。完成后,从地图中删除任务。

下面是一个假设任务由string标识并由func()实现的示例。

代码语言:javascript
复制
var (
    mu         sync.Mutex
    inProgress = map[string]bool{}
)

func startTask(id string, fn func()) {
    mu.Lock()
    ip := inProgress[id]
    if !ip {
        inProgress[id] = true
    }
    mu.Unlock()
    if ip {
        log.Printf("task %s in progress", id)
    } else {
        go func() {
            fn()
            mu.Lock()
            delete(inProgress, id)
            mu.Unlock()
        }()
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66014070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档