.net - 用于 .NET 的无锁和线程安全 IList<T>

标签 .net multithreading structure ilist lock-free

是否有实现 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/

    相关文章:

    c++ - 如何在 linux 上获取在 "black box"中创建的线程数?

    c++ - 使用 std::async 从线程调用函数?

    c - 如何命名 C 结构中的未命名字段?

    c++ - 使用 union 标记在结构内引用 union 会给出错误的地址

    c# - 如何将 UTF-8 阿拉伯字母转换为 CodePage 1001?

    c# - 使用 Unity 注入(inject)属性值 - 类型转换

    c# - 只查找非继承接口(interface)?

    java - 弱引用是如何实现的?

    c++ - 如何使用单个解锁方法实现 C++ Reader-Writer 锁,可以称为读取器或写入器?

    structure - 结构内部的签名