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