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
去防止不必要的内存节约。