面试题答案
一键面试实现方法
可以通过使用sync.Mutex
来实现一个线程安全的map。示例代码如下:
package main
import (
"fmt"
"sync"
)
type SafeMap struct {
mu sync.Mutex
data map[string]interface{}
}
func NewSafeMap() *SafeMap {
return &SafeMap{
data: make(map[string]interface{}),
}
}
func (sm *SafeMap) Set(key string, value interface{}) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.data[key] = value
}
func (sm *SafeMap) Get(key string) (interface{}, bool) {
sm.mu.Lock()
defer sm.mu.Unlock()
value, exists := sm.data[key]
return value, exists
}
func (sm *SafeMap) Delete(key string) {
sm.mu.Lock()
defer sm.mu.Unlock()
delete(sm.data, key)
}
实现思路
- 定义结构体:定义一个包含
sync.Mutex
和map
的结构体SafeMap
。Mutex
用于保护map
的操作,避免并发读写冲突。 - 初始化:在
NewSafeMap
函数中,初始化map
。 - 操作方法:
- Set方法:在设置
map
的键值对时,先通过mu.Lock()
加锁,操作完成后通过defer mu.Unlock()
解锁,确保同一时间只有一个协程能修改map
。 - Get方法:获取
map
中值时同样加锁解锁,防止读取过程中map
被修改。 - Delete方法:删除
map
中键值对时也通过加锁解锁来保证线程安全。
- Set方法:在设置