说明
AtomicUnorderedInsertMap, 特点:
- 线程安全
- 该map只支持读写,不支持删除
- No resizing,不支持扩容。需要一开始指定好容量
- 2^30 最大默认容量,如果您需要更多,您可以填写所有的模板参数,因此您将 IndexType 更改为 uint64_t,或者可以使用 AtomicUnorderedInsertMap64
- 迭代器永远不会失效——写入不会使迭代器失效,可以并行迭代和插入
- 读效率高,即使并发写入读取也非常快
- 无锁写,即使并发写入,也没有线程被挂起
实现原理
此map提供无等待线性化读取和无锁线性化插入。
插入的值不会被移动,但不会提供并发控制以安全更新它们。事实上,它们仅以 const 形式出现。这是只做简单安全的事情,同时保留正常的东西 std::map 迭代形式,需要暴露迭代通过 std::pair (并防止封装对值的访问)。
有几个合理的策略可以就地执行对值的并发控制。希望策略可以通过值类型或额外的模板参数注入,以保持核心 AtomicUnorderedInsertMap 只插入以下:
CONST
这是当前实现的策略,很简单,高性能,但没有那么富有表现力。你总是可以输入一个值带有一个可变字段(参见 MutableAtom),但这看起来并不漂亮。
ATOMIC
SEQ-LOCK
后续补充