(C#,多线程,字典)求一个思路!

要实现这么一个东西,我这儿有个dictionary,会不定时的往里add数据。另有一个线程(叫T吧)定时的拿这个dictionary,接下来就是要设计的部分:拿到这个di... 要实现这么一个东西,我这儿有个dictionary,会不定时的往里add数据。另有一个线程(叫T吧)定时的拿这个dictionary,接下来就是要设计的部分:拿到这个dictionary后呢 ,需要根据里面每一个元素去做一个操作,这个操作不一定成功,如果成功后就将dictionary的这个元素去掉,如果不成功,就保留着,等待线程T再次拿到这个dictionary时,再操作。

dic里面元素可能很多,对每一个元素的操作可能比较费时,所以如果以同步的方式,可能还没遍历完dic,线程T就又开始了,所以应该用多线程吧,求一个思路。谢谢!
展开
 我来答
syht2000
高粉答主

2012-08-08 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
这个就是典型的消费者生产者问题,不过因为不清楚具体需求,如果是一般的处理,你可以考虑用queue<T>来替代dictionary(因为自带了Dequeue、Enqueue和peek方法,使用上要简单很多),通常两个线程就够了,一个生产,一个消费,消费者先判断queue中有没有数据,如果有的话就peek数据,操作成功后就Dequeue。如果你一定需要两个线程顺序执行,可以用Mutex进行互斥。
追问
你说的我明白,你还是没仔细看我问题。我的消费者比较耗时间,而且需要每隔一段时间便利一下整个dic
追答
我觉的你没有说清楚,如果你只是想在消费者中再开多个线程来处理,那就可以考虑用AutoResetEvent数组,WaitHandle.WaitAll(AutoResetEvent[]);可以等待所有操作完成再继续。
zgh840925
2012-08-08 · TA获得超过283个赞
知道小有建树答主
回答量:410
采纳率:0%
帮助的人:349万
展开全部
因为你这个集合是动态的 所以你这个集合是否 KEY有规律 如果没有规律 就得创建一个编号

多线程 假如10个
每个线程处理 集合 1/10 的数据 所以需要一个静态变量 来记录编号 每个线程来申请的时候 记录下这个编号 申请的时候要锁定

大致如下

public static Dictionary<int, object> list;
public static int listFlag;

lock(listFlag)
读取大于编号listFlag 的 10条?
记录 listFlag 等于最后一条的编号

这样你添加的同时也不会影响到读取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxhgga
2012-08-08 · TA获得超过687个赞
知道小有建树答主
回答量:1019
采纳率:74%
帮助的人:627万
展开全部
创建2个线程,一个负责添加数据
一个负责读取数据。
追问
请仔细看问题,谢谢
追答
我小学没有毕业
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式