golang 解决同时向map写数据
package main
import (
"fmt"
"sync"
)
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in main:", r)
}
}()
m := make(map[int]int)
var wg sync.WaitGroup
var mu sync.Mutex
for i := 0; i < 2; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
mu.Lock()
m[i] = i
mu.Unlock()
}(i)
}
wg.Wait()
fmt.Println(m) // 安全地打印map内容
}
//使用Mutex机制处理并发map写问题,因为map不是线程安全的并发写数据会造成panic异常错误
//使用sync包中的其他并发安全的数据结构,如sync.Map,它专为并发环境设计 建议使用sync.Map
//使用通道(channel):虽然这不是解决并发map问题的直接方法,但可以通过通道来协调对map的访问,确保每次只有一个goroutine修改map。
浙公网安备 33010602011771号