1

我有一个非常具体的场景:

  1. 几个(多核而非多核)TPL 任务(长时间运行,很可能是线程)希望以并行/重叠的方式读取数据集合(例如 IDictionary)
  2. 一个 Writer 线程想要定期更新整个集合
  3. 最大限度地减少读者的延迟是第一目标,即使这意味着选择一个稍微陈旧的集合(即集合更新正在进行中)
  4. 读者必须获得完整的收藏,部分更新的收藏无效

最初的想法是避免 (4) 每次发生更新时都会创建一个新集合,并且一旦创建,编写器线程就可以简单地更改提供给读者的集合引用。隐含的假设是这将是一个原子操作,具有旧引用的读者将不受影响,新读者可以访问新的完整集合。

当我尝试它时,我得到了一个部分更新的集合,所以我需要知道这种方法是否可以工作,然后再继续进行......

4

1 回答 1

0

自发布以来已经有一段时间了,但 IIRC 我正在使用旧集合作为构造函数参数创建一个新集合 - 即浅拷贝。

对元素进行适当的复制并用它们实例化新容器给了我需要的数据项的解耦,以确保没有“撕裂”。

于 2013-12-24T12:53:12.847 回答