golang map
真的是深坑,PHP中直接写入没问题,GOLANG和PHP不一样,必须加锁。
package main
import (
"fmt"
"sync"
"time"
)
var m = make(map[int]int)
var m2 = make(map[int]int)
var m3 = make(map[int]int)
var lock sync.Mutex
func main() {
for i := 0; i < 1000; i++ {
go func(n int) {
lock.Lock() //加锁,加锁期间其他协程会进入阻塞状态直到解锁
time.Sleep(time.Duration(1)*time.Second)
fmt.Println(n, "在执行")
m[n] = n
m2[n] = n
m3[n] = n
for j := 0; j < 1000; j++ {
m[n] = j
m2[n] = j
m3[n] = j
}
lock.Unlock() //解锁
}(i)
}
fmt.Println("finished.")
//time.Sleep(time.Duration(20)*time.Second)
}
加锁。
本文通过一个示例展示了在 Golang 中并发修改 map 的风险,并解释了为何需要使用互斥锁(lock)来避免数据竞争,确保并发安全。
669

被折叠的 条评论
为什么被折叠?



