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
即可实现删除操作,只是打了一个墓碑标记,不适合删除很多元素时使用。
同样的,哈希冲突基于开放地址法解决。通过模板提供了线性探测和平方探测两种策略。
迭代器遍历元素时也要越过相应的墓碑和空位。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。