System.Collections.Generic.LinkedList`1.AddLast(T value)中的NullReferenceException

时间:2013-12-06 15:02:35

标签: c# multithreading linked-list nullreferenceexception

我的项目中有一个LinkedList<T>,我添加和删除了很多元素(每秒几百个)。这是通过锁同步的多个线程发生的。

现在有时候(可能每几个100.000个元素)我在NullReferenceException方法中得到一个AddLast“,所以堆栈跟踪的顶部条目如下:

  

at System.Collections.Generic.LinkedList`1.AddLast(T value)

有人知道为什么会发生这种情况以及如何避免这种情况?

简单/愚蠢的尝试 - &gt; catch-&gt;重复将是我最好的主意,但这更像是一个肮脏的解决方法......

1 个答案:

答案 0 :(得分:8)

  

这是通过锁定同步的多个线程发生的。

我怀疑你基本上忘了锁在一个地方。这是可能的,还是你某些你只能在一个地方访问它?

例如,如果你有一个线程在另一个线程添加新元素的同时删除列表中的最后一个元素,我可以看到你是如何得到该异常的。

我建议你尝试只从一个类中直接访问它,而不是暴露“原始”链表,这个类可以负责所有锁定(这应该非常非常简单)。