【发布时间】:2010-11-24 01:17:24
【问题描述】:
我有两个线程,一个将对象放入通用列表集合的生产者线程和一个将这些对象从同一个通用列表中拉出的消费者线程。我已经使用 lock 关键字正确同步了对集合的读取和写入,并且一切正常。
我想知道的是是否可以在不首先锁定集合的情况下访问 Count 属性。
JaredPar 将 Count 属性 in his blog 称为可能导致竞争条件的决策过程,如下所示:
if (list.Count > 0)
{
return list[0];
}
如果列表有一个项目,并且在访问 Count 属性之后但在索引器之前删除了该项目,则会发生异常。我明白了。
但是可以使用 Count 属性来确定一个完全不同的集合的初始大小吗? MSDN documentation 表示不能保证实例成员是线程安全的,所以我应该在访问 Count 属性之前锁定集合吗?
【问题讨论】:
标签: c# .net multithreading .net-3.5 locking