需要Syncroot用于LinkedList(T)

时间:2010-02-09 09:02:09

标签: vb.net multithreading collections synchronization

我正在使用VB.Net并想使用LinkedList。唯一的问题是它是一个多线程应用程序。我在MSDN上看到,Syncroot是ICollection接口的显式实现。我发现人们想要用List(Of T)做类似的事情。似乎解决方案是将列表转换为接口。

我试图做我想象的在VB.Net中做类似的事情,基本上:

Dim TestLinkedList = New LinkedList(Of Long)
SyncLock (Ctype(TestLinkedList, ICollection)).SyncRoot
    .
    .
    .
End SyncLock

以上是否正确?

2 个答案:

答案 0 :(得分:2)

它会起作用,这就是所有可以说的。 SyncRoot是.NET 1.1的一个错误,没有理由继续这种做法。

Dim list = New LinkedList(Of Long)
Dim listLock = New Object
...

SyncLock(listLock)
...
End SyncLock

答案 1 :(得分:0)

ICollection.SyncRoot通常被认为是一个坏主意。您应该锁定集合本身,或锁定您创建的单独锁定对象