乐趣区

关于c++:Folly库代码赏析1AtomicHashArray

Folly是 facebook 公司提供的开源 C ++ 代码库,品质很高,用以补充规范库和 boost 库的有余,在性能方面提出了很高的要求。

AtomicHashArray是用于构建 AtomicHashMap 的原料,在某些条件下面做了额定要求,通过升高通用性达到进步特定条件下性能的目标。

当通过 AtomicHashArray::Config 构建时,因为static initialization order fiasco,咱们只能通过提供默认函数参数而不是提供一个动态全局实例。

实质上,AtomicHashArray就是一个动态数组,通过 CAS 操作实现并发插入、删除操作。关键在于如何封装使得对元素操作原子化。

提供了三个标记元素 empty_key、locked_key、erased_key

插入时:通过原子性的变更 key,例如讲empty_key 变更为locked_key,从而实现单个元素的上锁,而后再进行 value 的结构,最初set new_key。当然,这里对 key 的限度比拟大,要求 key 可能convert to int32

删除时:定位到给定元素,而后 CAS 更改为 erased_key 即可实现删除操作,只是打了一个墓碑标记,不适宜删除很多元素时应用。

同样的,哈希抵触基于凋谢地址法解决。通过模板提供了线性探测和平方探测两种策略。

迭代器遍历元素时也要越过相应的墓碑和空位。

退出移动版