c ++ unordered_分块锁与unordered_map

分块锁不可以和unordered_map联用

unordered_map 的rehash机制

unordered_map 的底层数据结构为HashTable。
HashTable有rehash机制,触发的时机为"Rehash will occur only if the new number of buckets respect the unordered_map maximum load factor."

template

如上,rehash操作时存在旧地址数据拷贝到新地址,及旧地址销毁、更新地址指向的过程。
当多线程环境下分块锁+unordered_map使用如下:

std

在unordered_map触发rehash后,存在程序core的风险。

问题解决

在阅读levelDb lrucache代码,结合此问题,理解了lrucache的设计思想。

unordered_map使用心得

unordered_map默认的桶数为11 ,load_factor是1。
在实际使用中如果需要存储有大量数据,频繁的rehash会非常影响性能。
解决办法是在unordered_map建立时根据实际需要预先设定桶数和元素数避免后期可能的rehash

int 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值