V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lucarfulllll  ›  全部回复第 1 页 / 共 1 页
回复总数  1
看了下例子,有点不懂的地方想问下楼主和留言的大神。
sync.map{} 按照官方的描述就是并发安全的,而且内部实现也是加了 Mutex 锁,为啥请求中还加了读写锁呢?麻烦指教

var rwLock sync.RWMutex

// mode=2
var List2 sync.Map

.....



// GetTaskByIDModel 查询 task
func GetTaskByIDModel(id int64) (Task, error) {
var task Task
var ok bool
rwLock.RLock()
defer rwLock.RUnlock(). // 此处还加读写锁是否多余呢?
if mode == 1 {
task, ok = List[id]
} else if mode == 2 {
v, o := List2.Load(id)
if o {
task, ok = v.(Task)
if !ok {
return Task{}, errors.New("not found")
}
} else {
log.Println("从 sync.Map 中获取 task 失败")
}
}
if !ok {
return Task{}, errors.New("not found")
}
return task, nil
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4985 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
Developed with CodeLauncher
♥ Do have faith in what you're doing.