dam*_*boy 14 .net multithreading ilist structure lock-free
是否存在实现IList的无锁且线程安全的数据结构?
当然,无锁是指一种实现,它不使用.NET中的锁定原语,而是使用互锁操作/原子操作来实现线程安全......没有一个,显然在并发数据结构下......
有没有人见过一个漂浮?
我见过一个用氨基-cbbs实现的java 文件,名为LockFreeVector但到目前为止还没有用于.NET.有任何想法吗?
好吧,我无法在任何地方找到这样的课程; 所以我试了一下.
我的ConcurrentList<T>类的源代码可以在GitHub上找到.
它是无锁,线程安全的(我认为,基于我的单元测试)和实现IList<T>.
它不支持Insert,RemoveAt/ Remove,或Clear.
我很高兴地发现我的实现(我独立提出)与软件世界中一些备受尊敬的人发布的数据结构非常相似.
有关实现本身的相当简短的讨论,请参阅我最近关于它的博客文章.
目前,它根本没有记录,考虑到一些代码的"棘手",这有点不好:(
无论如何,如果你看一看并发现错误或其他问题,请给我一个新的.
无论如何,你可能值得花时间去检查一下.如果你这样做,请告诉我你的想法.
由于整数Parallel.For和Parallel.ForEach类方法,Collections.Concurrent命名空间中可能缺少实现IList的ConcurrentList .可以说它们可以用来处理任何列表作为Concurrent,以便快速枚举列表并对其项执行操作.
也许通过不提供ConcurrentList他们意味着或认为如果Parralel.For不能帮助人们不需要使用IList而是其他类型的集合,如堆栈或队列甚至Bag甚至字典
我同意这种设计,因为必须在多线程条件下处理可索引的集合听起来非常容易出错并且设计不好.如果在任何时候都可以修改集合并且索引将被无效,那么知道项目索引的目的是什么?在有多个读者的情况下 - 编写者对我来说非常清楚,队列或堆栈通常是最合适的集合,或者包包也可以.也可以使用字典,因为它的索引不会通过向集合中添加项目而无效,如果需要并行访问List,则可以使用Parralel.For方法
我发现真的很奇怪 - http://msdn.microsoft.com/en-us/library/dd381935.aspx这里我们可以读到有关ConcurrentLinkedList类但我在System.dll中找不到它,只有Bag和BlockingCollection存在.
我还会说至少有95%的可能性,至少两个中的任何一个对你的问题都是正确的
我还要说,通过不提供ConcurrentList,他们已经保存了那些错误地选择ConcurrentList来解决他们的问题的开发人员,他们犯了许多错误并节省了大量时间,迫使开发人员使用现有的Concurrent集合.