(C#,多线程,字典)求一个思路!
要实现这么一个东西,我这儿有个dictionary,会不定时的往里add数据。另有一个线程(叫T吧)定时的拿这个dictionary,接下来就是要设计的部分:拿到这个di...
要实现这么一个东西,我这儿有个dictionary,会不定时的往里add数据。另有一个线程(叫T吧)定时的拿这个dictionary,接下来就是要设计的部分:拿到这个dictionary后呢 ,需要根据里面每一个元素去做一个操作,这个操作不一定成功,如果成功后就将dictionary的这个元素去掉,如果不成功,就保留着,等待线程T再次拿到这个dictionary时,再操作。
dic里面元素可能很多,对每一个元素的操作可能比较费时,所以如果以同步的方式,可能还没遍历完dic,线程T就又开始了,所以应该用多线程吧,求一个思路。谢谢! 展开
dic里面元素可能很多,对每一个元素的操作可能比较费时,所以如果以同步的方式,可能还没遍历完dic,线程T就又开始了,所以应该用多线程吧,求一个思路。谢谢! 展开
3个回答
展开全部
这个就是典型的消费者生产者问题,不过因为不清楚具体需求,如果是一般的处理,你可以考虑用queue<T>来替代dictionary(因为自带了Dequeue、Enqueue和peek方法,使用上要简单很多),通常两个线程就够了,一个生产,一个消费,消费者先判断queue中有没有数据,如果有的话就peek数据,操作成功后就Dequeue。如果你一定需要两个线程顺序执行,可以用Mutex进行互斥。
追问
你说的我明白,你还是没仔细看我问题。我的消费者比较耗时间,而且需要每隔一段时间便利一下整个dic
追答
我觉的你没有说清楚,如果你只是想在消费者中再开多个线程来处理,那就可以考虑用AutoResetEvent数组,WaitHandle.WaitAll(AutoResetEvent[]);可以等待所有操作完成再继续。
展开全部
因为你这个集合是动态的 所以你这个集合是否 KEY有规律 如果没有规律 就得创建一个编号
多线程 假如10个
每个线程处理 集合 1/10 的数据 所以需要一个静态变量 来记录编号 每个线程来申请的时候 记录下这个编号 申请的时候要锁定
大致如下
public static Dictionary<int, object> list;
public static int listFlag;
lock(listFlag)
读取大于编号listFlag 的 10条?
记录 listFlag 等于最后一条的编号
这样你添加的同时也不会影响到读取
多线程 假如10个
每个线程处理 集合 1/10 的数据 所以需要一个静态变量 来记录编号 每个线程来申请的时候 记录下这个编号 申请的时候要锁定
大致如下
public static Dictionary<int, object> list;
public static int listFlag;
lock(listFlag)
读取大于编号listFlag 的 10条?
记录 listFlag 等于最后一条的编号
这样你添加的同时也不会影响到读取
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
创建2个线程,一个负责添加数据
一个负责读取数据。
一个负责读取数据。
追问
请仔细看问题,谢谢
追答
我小学没有毕业
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询