请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,求详解下这个锁,锁的是单个的元素还是整个数组?还有,求详解下如果不锁会发生什么?

//todo userid和node形成绑定关系
rwlocker.Lock()
clientMap[userId]=node
rwlocker.Unlock()

还有,这个读锁是防止什么情况发生?
//todo 发送消息
func sendMsg(userId int64,msg []byte) {
rwlocker.RLock()
node,ok:=clientMap[userId]
rwlocker.RUnlock()
if ok{
node.DataQueue<- msg
}
}

正在回答 回答被采纳积分+3

1回答

winlion 2019-06-30 23:36:11

使用锁是问了防止map在高并发时出错

可以采用sync.map代替

0 回复 有任何疑惑可以回复我~
  • 不建议使用sync.map, 对于这种经常变化的情景, 使用sync.map 性能不如简单的內建map,配合读写锁来的效率高。 sync.map 使用interface, 来回的强转也是性能开销
    回复 有任何疑惑可以回复我~ 2019-08-11 00:06:23
  • winlion 回复 _Zereker_ #2
    对的,sync.map 在大并发下性能表现不佳
    回复 有任何疑惑可以回复我~ 2019-08-22 15:15:21

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信