我有一个非常具体的场景:
- 几个(多核而非多核)TPL 任务(长时间运行,很可能是线程)希望以并行/重叠的方式读取数据集合(例如 IDictionary)
- 一个 Writer 线程想要定期更新整个集合
- 最大限度地减少读者的延迟是第一目标,即使这意味着选择一个稍微陈旧的集合(即集合更新正在进行中)
- 读者必须获得完整的收藏,部分更新的收藏无效
最初的想法是避免 (4) 每次发生更新时都会创建一个新集合,并且一旦创建,编写器线程就可以简单地更改提供给读者的集合引用。隐含的假设是这将是一个原子操作,具有旧引用的读者将不受影响,新读者可以访问新的完整集合。
当我尝试它时,我得到了一个部分更新的集合,所以我需要知道这种方法是否可以工作,然后再继续进行......