Odr*_*rai 2 c# multithreading blockingcollection
我在C#应用程序中使用两个线程来访问相同的BlockingCollection.这工作正常,但我想要检索第一个值两次,以便两个线程检索相同的值*.
几秒钟后,我想轮询两个线程的currentIndex并删除每个值<index.因此,例如,线程的最低currentIndex是5,应用程序删除队列中索引0 -5处的项目.另一种解决方案是,如果所有线程都处理了该值,则删除队列中的值.
我怎么能做到这一点?我想我需要另一种类型的缓冲区..?
先感谢您!
*如果.Take()由thread1调用,则该项目将在集合中删除,而thread2无法再次获取相同的项目.
更新:
我想将数据存储在缓冲区中,因此例如thread1将数据保存到HDD,而thread2分析(相同)数据(并发).
使用producer-consumer将Value1添加到两个单独的ConcurrentQueues.让线程出列然后从它们自己的队列中处理它们.
编辑7/4/14:这是一个朦胧,朦胧,半思索的解决方案:创建一个缓冲的自定义对象.它可能包含您尝试在线程1中缓冲的信息和线程2中的分析结果的空间.
将对象添加到线程1和BlockingCollection中的缓冲区.使用线程2分析结果并使用结果更新对象.阻塞集合不应该太大,因为它只处理引用不应该打你的记忆.这假设您不会在两个线程上同时修改缓冲区中的信息.
另一个也是经过深思熟虑的解决方案是同时将信息提供给缓冲区和阻塞集合.分析来自BlockingCollection的数据,将其提供给输出集合并再次与缓冲区匹配.如果你做得对,这个选项可以处理并发修改,但可能更多的工作.
我认为选项一更好.正如我所指出的,这些只是半成形的,但它们可能会帮助您找到适合您特定需求的东西.祝好运.