Go HTTP处理程序中的简单竞争条件-这真的是竞争条件吗?

棕湾:

给定下面的代码,我试图理解为什么Go竞赛检测器(go run -race example.go)不会抱怨竞赛条件。

var count int

func main() {
    http.HandleFunc("/a/", func(w http.ResponseWriter, r *http.Request) {
        count++ 
        fmt.Println(count)
    })

    http.HandleFunc("/b/", func(w http.ResponseWriter, r *http.Request) {
        count++
        fmt.Println(count)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

据我了解,Go HTTP Server在单独的goroutine中响应所有请求。考虑到这一点,处理程序函数对全局计数变量的增量是否会在与主goroutine分开的goroutine中发生,从而构成数据竞争?

如果这不是一场数据竞赛,我非常想知道为什么。

吉姆:

这是一次数据竞赛,但是竞赛检测器不会报告未发生的竞赛。您需要确保测试中存在并发调用,并且GOMAXPROCS>1还可以帮助将其清除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章