说明

AtomicUnorderedInsertMap, 特点:

  1. 线程安全
  2. 该map只支持读写,不支持删除
  3. No resizing,不支持扩容。需要一开始指定好容量
  4. 2^30 最大默认容量,如果您需要更多,您可以填写所有的模板参数,因此您将 IndexType 更改为 uint64_t,或者可以使用 AtomicUnorderedInsertMap64
  5. 迭代器永远不会失效——写入不会使迭代器失效,可以并行迭代和插入
  6. 读效率高,即使并发写入读取也非常快
  7. 无锁写,即使并发写入,也没有线程被挂起


实现原理

此map提供无等待线性化读取和无锁线性化插入。

插入的值不会被移动,但不会提供并发控制以安全更新它们。事实上,它们仅以 const 形式出现。这是只做简单安全的事情,同时保留正常的东西 std::map 迭代形式,需要暴露迭代通过 std::pair (并防止封装对值的访问)。

有几个合理的策略可以就地执行对值的并发控制。希望策略可以通过值类型或额外的模板参数注入,以保持核心 AtomicUnorderedInsertMap 只插入以下:

CONST

这是当前实现的策略,很简单,高性能,但没有那么富有表现力。你总是可以输入一个值带有一个可变字段(参见 MutableAtom),但这看起来并不漂亮。

ATOMIC


SEQ-LOCK

后续补充