AtomicHashArray
中通过将key
强制转型为std::atomic<KeyT>*
来实现key
的原子操作。- 为了避免昂贵操作,如通过
stringpiece
查找string
,AtomicHashMap
提供了转换函数允许提供可转换位key
的查询参数,即使不是同一类型,也可以比较二者是否相等。 AtomicHashMap
的插入操作:- 向
primary AtomicHashArray
中插入 - 如果已满,分配
sub map
并插入
- 向
底层分配策略:
// if subMap == 0 (primary map) => // bit(s) value // 31 0 // 0-30 submap offset (index_ret input) // // if subMap > 0 (secondary maps) => // bit(s) value // 31 1 // 27-30 which subMap // 0-26 subMap offset (index_ret input)
底层分配是1个
primary map
+ N个sub map
。总和容量实际上是和2个
primary map
一致的,为了避免内存浪费,通过溢出时再分配多个sub map
去避免不必要的内存浪费。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。