【发布时间】:2011-07-31 20:38:18
【问题描述】:
在浏览一些 数据库 代码以寻找与此问题无关的错误时,我注意到在某些地方 List<T> 的使用不当。具体来说:
- 有许多线程同时访问
List作为读者,但使用索引 进入list而不是enumerators。 -
list有一个作者。 -
同步为零,读取器和写入器同时访问
list,但由于代码结构的原因,last 元素直到执行Add()的方法返回。 - 从未从
list中删除任何元素。
根据 C# 文档,这不应该是线程安全的。
然而它从未失败过。我想知道,由于 List 的具体实现(我在内部假设它是一个 array,当它用完空间时 re-allocs),它1-writer 0-enumerator n-reader add-only 场景意外线程安全,或者在当前 .NET4 实现中是否存在一些不太可能发生的情况?
编辑:重要的细节我在阅读一些回复时遗漏了。读者将List 及其内容视为只读。
【问题讨论】:
标签: c# list thread-safety concurrent-programming