分块锁不可以和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