互联网面试宝典

您现在的位置是: 首页 > Golang

问题详情

在 golang 中怎么处理对 map 进行并发访问?

面试宝典 2023-06-12 Web前端开发工程师 57
可以使用 sync 包中的 Mutex 或者 RWMutex 来解决对 map 的并发访问问题。

使用 Mutex,需要在访问 map 之前先加锁,访问完之后再解锁。

例如:

```go
// 定义一个 map
var m map[int]int = make(map[int]int)

// 定义一个互斥锁
var mutex sync.Mutex

// 并发访问 map
func f(i int) {
mutex.Lock() // 加锁
m[i] = i * 2 // 访问 map
mutex.Unlock() // 解锁
}
```

使用 RWMutex,可以允许多个 goroutine 同时读取 map,但是在写的时候则需要独占访问。

例如:

```go
// 定义一个 map
var m map[int]int = make(map[int]int)

// 定义一个读写锁
var rwmutex sync.RWMutex

// 并发访问 map
func f(i int) {
rwmutex.Lock() // 写需要加写锁
m[i] = i * 2 // 写操作
rwmutex.Unlock() // 解写锁

rwmutex.RLock() // 读可以加读锁
fmt.Println(m[i]) // 读操作
rwmutex.RUnlock() // 解读锁
}
```