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。

posted @ 2024-08-12 09:52  北京小小鸟  阅读(17)  评论(0)    收藏  举报