gpt4 book ai didi

c# - 多线程BlockingCollection同值

转载 作者:行者123 更新时间:2023-12-02 12:04:27 24 4
gpt4 key购买 nike

我在 C# 应用程序中使用两个线程来访问同一个 BlockingCollection。这工作正常,但我想检索第一个值两次,以便两个线程检索相同的值*。

几秒钟后,我想轮询两个线程的 currentIndex 并删除每个值 < index.例如,线程的最低 currentIndex 为 5,应用程序将删除队列中索引 0 -5 处的项目。另一种解决方案是,如果所有线程都处理了该值,则删除队列中的值。

我怎样才能做到这一点?我想我需要另一种类型的缓冲区..?

提前谢谢您!

*如果线程1调用.Take(),则该项目将从集合中删除,并且线程2无法再次获取相同的项目。

<小时/>

更新:

我想将数据存储在缓冲区中,因此例如线程1将数据保存到HDD,线程2分析(相同)数据(并发)。

最佳答案

使用生产者-消费者将 Value1 添加到两个单独的 ConcurrentQueues 中。让线程出队,然后从自己的队列中处理它们。

编辑 2014 年 7 月 4 日:这是一个模糊的、老套的、半途而废的解决方案:创建一个缓冲的自定义对象。它可能包含您尝试在线程 1 中缓冲的信息和线程 2 中的分析结果的空间。

将对象添加到线程 1 中的缓冲区和 BlockingCollection 中。使用线程 2 分析结果并用结果更新对象。阻塞集合不应该变得太大,并且因为它只处理引用,所以不应该占用您的内存。这假设您不会在两个线程上同时修改缓冲区中的信息。

另一个半途而废的解决方案是将信息同时输入缓冲区和阻塞集合。分析来自 BlockingCollection 的数据,将其输入输出集合并再次将它们与缓冲区进行匹配。如果操作正确,此选项可以处理并发修改,但可能需要更多工作。

我认为选项一更好。正如我所指出的,这些只是半成品,但它们可能会帮助您找到适合您特定需求的东西。祝你好运。

关于c# - 多线程BlockingCollection同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com