最近,我一直在尝试使用多个线程来创建我的老项目,显然,收藏是其中的一部分。问题在于,一小段代码不断随机崩溃(虽然很少,但仍然足够明显): 编辑:我知道SynchronizedCollection类仅在创建Enumeration时自动锁定,因此,普通的foreach是不够的,这就是为什么将整个循环括在{ {1}}块。问题在于这样一个事实,即当线程位于 此外,.NET 4并发API下的所有类都不能满足我的所有需求,因此,如果我不想使整个代码库变得比现在更复杂,我真的没有选择。 答案 0 :(得分:1) 首先,如果您使用的是Monde
是一个SynchronizedCollection,我将其锁定以防止同时写入,但它仍在抱怨它。我有什么想念的吗?lock
块内时,集合会以某种方式被修改,这是不应该发生的。1 个答案:
placement new
,则无需将其包装在SynchronizedCollection
中,因为它可以在幕后进行带锁操作。第二个lock
来自.Net 2.0时代,如果要移植旧代码,则最好使用SynchronizedCollection
命名空间中的集合。它们是更新的,更优化的,并且不依赖于锁定和阻止策略。