首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中有没有一个等同于芭乐条纹类的东西?

在C#中有没有一个等同于芭乐条纹类的东西?
EN

Stack Overflow用户
提问于 2015-08-17 17:22:32
回答 4查看 728关注 0票数 18

在某些情况下,我非常喜欢使用Guava's Striped类。

在C#中有相应的功能吗?

EN

回答 4

Stack Overflow用户

发布于 2015-08-22 23:00:39

它看起来没有直接的等价物,但是有一些无锁的线程安全收集选项(我不确定您试图实现什么,所以我不能说它们是否适用于您的场景)。看一看System.Collections.Concurrent Namespace

特别是,ConcurrentBag、ConcurrentQueue、ConcurrentStack和ConcurrentDictionary都有不同的锁定/无锁定线程安全策略。其中一些在this blog post中进行了解释。

您也许能够通过Partitioner类获得您想要的东西,尽管我不确定具体的实现。

@Behrooz说所有.net框架类型只对整个列表使用一个锁,这是不正确的。看一看source for ConcurrentDictionary。第71行表明这个类是使用多个锁实现的。

如果你真的想,你可以写你自己的版本。芭乐条纹的源代码是:https://github.com/google/guava/blob/master/guava/src/com/google/common/util/concurrent/Striped.java

票数 10
EN

Stack Overflow用户

发布于 2015-08-22 17:22:48

我认为你能做的最好的就是实现你自己的,因为所有的dotnet框架类型都只为整个列表提供了一个lock

要做到这一点,您可以使用GetHashCode()函数,模数(%)它与您想要的条带数量。并将其用作Tuple<TLock, List<T>>[]的索引,其中TLock可以是System.Threading名称空间中定义的任何类型的锁,T是您想要存储/访问的类型。

有了它,你可以决定你想要如何存储你的条带。有一些选择,比如HashSet(在您的例子中效率很低,因为您已经使用了一些位来计算条带索引)、SortedSetListArray

顺便说一句,谢谢你的问题,它将帮助我解决我遇到的一个问题。

票数 6
EN

Stack Overflow用户

发布于 2015-08-28 17:33:25

你有没有试过NuGet的Tamarind

这是谷歌Guava库的C#端口

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

https://stackoverflow.com/questions/32046799

复制
相关文章

相似问题

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