我有一个http服务器。它是用 Go 编写的。我有这个代码:package mainimport ( "net/http" "runtime")var cur = 0func handler(w http.ResponseWriter, r *http.Request) { cur = cur + 1;}func main() { runtime.GOMAXPROCS(runtime.NumCPU()) http.HandleFunc("/", handler) http.ListenAndServe(":9010", nil)}安全吗?我可能需要使用互斥锁吗?
2 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
不,这不安全,是的,您需要锁定某种形式。每个连接都在它自己的 goroutine 中处理。有关详细信息,请参阅Serve() 实现。
一般模式是使用 goroutine 检查通道并通过通道接受更改:
var counterInput = make(chan int)
func handler(w http.ResponseWriter, r *http.Request) {
counterInput <- 1
}
func counter(c <- chan int) {
cur := 0
for v := range c {
cur += v
}
}
func main() {
go counter(counterInput)
// setup http
}
- 2 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消