首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SyncLock同步访问列表(Of T)

使用SyncLock同步访问列表(Of T)
EN

Stack Overflow用户
提问于 2010-11-16 17:50:12
回答 1查看 1.8K关注 0票数 1

我有一个类,它包含在多线程应用程序中使用的( T)列表。我有三个方法Get、Add和Remove这些访问和修改列表(的T)。每当我查询所需对象时,以及在添加或删除对象时,我都会使用SyncLock锁定m_List。然而,我很好奇,当我添加一个对象或删除一个对象时,是否通过简单地锁定m_List来提高性能,而不是在搜索所需的对象?时。

代码语言:javascript
复制
Public Shared sub Add(SomeObject as object)

     SyncLock ctype(m_List, IList).SyncRoot

         m_List.add(SomeObject)

     end SyncLock

end sub

Public Shared sub Remove(SearchString as string)

     SyncLock ctype(m_List, IList).SyncRoot

           m_List.RemoveAll(function(o as SomeObject) o.SomeProperty = SearchString)

     end SyncLock
end Function

Public Shared Function Get(SearchString as string) as SomeObject
     'The Commented out code is what I am thinking of removing...
     'SyncLock ctype(m_List, IList).SyncRoot

     Dim FoundObjectList = m_List.where(function(o as SomeObject) o.SomeProperty = SearchString)

    if FoundObjectList.count > 0 then 

       If FoundObjectList(0).CreateDate < Now.AddMinutes(5) then
          Remove(FoundObjectList(0).SomeProperty)
          Return nothing
       end if
    else
         Return FoundObjectList(0)

    End if

   Return Nothing
'end SyncLock
end sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-16 17:52:20

如果您尝试在列表中迭代并允许另一个线程在执行时添加一个条目,那么您将得到一个InvalidOperationException,它就是这样简单的。我猜这不是你想要的行为。

List<T>根本不支持从一个线程写入和从另一个线程同时读取-特别是不迭代列表。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4197238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档