是否有实现 IList 的无锁和线程安全数据结构?
自然地,无锁是指在 .NET 中不使用锁定原语而是使用互锁操作/原子操作来实现线程安全的实现......
没有一个,显然在并发数据结构下......
有没有人看到一个漂浮的?
我见过一个在 amino-cbbs 中实现的 java ,称为 LockFreeVector但到目前为止,.NET 还没有。
有任何想法吗?
最佳答案
由于整个 Parallel.For
,Collections.Concurrent 命名空间中可能缺少实现 IList 的 ConcurrentList和 Parallel.ForEach
类方法。可以说它们可用于将任何列表作为并发处理,以便快速枚举列表并对其项执行操作。
也许不提供 ConcurrentList
他们的意思或认为,如果 Parralel.For 无法提供帮助,则需要使用的不是 IList 而是其他类型的集合,例如堆栈或队列,甚至包甚至字典
我同意这种设计,因为在多线程条件下必须处理可索引的集合听起来很容易出错并且设计很糟糕。如果可以随时修改集合并且索引将失效,那么知道项目索引的目的是什么,在有多个读者的这种情况下 - 作者很清楚,队列或堆栈通常是最合适的集合,或者包包也可以。也可以使用字典,因为它的索引不会因向集合添加项目而失效,如果您需要并行访问 List,您可以得到 Parralel.For
方法
我觉得很奇怪 - http://msdn.microsoft.com/en-us/library/dd381935.aspx在这里我们可以阅读 ConcurrentLinkedList 类,但我在 System.dll 中找不到它,只有 Bag 和 BlockingCollection 在那里。
我还想说,至少有 95% 的机会,两个中的任何一个对您的问题都是正确的
比 ConcurrentList
并发集合将
比收藏更好
并发列表
我还要说,通过不提供 ConcurrentList,他们拯救了那些错误地选择 ConcurrentList 来解决他们犯许多错误的问题的开发人员,并为他们节省了大量时间,迫使开发人员使用现有的 Concurrent 集合。
关于.net - 用于 .NET 的无锁和线程安全 IList<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070495/