当前位置:编程学习 > C#/ASP.NET >>

多线程轮流输出数据

我创建了两个线程,两个线程同时调用同一张数据表。我的想法是:线程一执行数据表第一行,线程二执行数据表第二行,线程一执行数据第三行····这样交替进行,请各位给点帮助,我不知道代码要怎么写?
数据表示这样的:

多线程 C# --------------------编程问答-------------------- 求各位大侠帮忙啊!!!
--------------------编程问答-------------------- 这样性能反而低。因为cache关联性的缘故。 --------------------编程问答-------------------- 那你的意思是一个线程处理一张数据表性能会好些? --------------------编程问答--------------------
引用 3 楼 u011061626 的回复:
那你的意思是一个线程处理一张数据表性能会好些?


看你的“表”是怎么实现的。读取和写入表的数据是否需要同步。 --------------------编程问答-------------------- 看这情形,没必要多线程。
当某一个线程可能会出现等待系统资源的时候,如网络阻塞、磁盘IO等,而其他任务不必等待这个线程的完成,为了提高性能,才需要用多线程。 --------------------编程问答-------------------- 如果数据量不大没必要使用多线程的 --------------------编程问答-------------------- 你的线程怎么知道自己取的是第一行还是第二行?
如果有标志位区分的话,直接让线程一处理 select * from tab where xx=1 --------------------编程问答-------------------- 线程二处理 select * from tab where xx=2就好了

如果线程一和线程二之间存在互斥的调度,必须要按顺序先线程一处理完第一行,线程二才能处理第二行的话,那就要再加一个控制器,由这个控制器来调度线程。
那实际上就只有控制器会访问数据库,线程一和二的数据都由调度器给过去就好了。 --------------------编程问答-------------------- 代码不应该是这么写的, 不管如何,你两个线程代码肯定是一致的。 你又为什么非要让他们谁处理哪一条呢?

比较好的做法是,谁完成了任务,就去表里取下一条没处理过的记录,再处理。完成之后再取下一条未处理过的记录。

给一个参考的建议如下:

1. 把表一次性全读到内存中, 并且加入到一个Queue中。 
2. 启动N个线程。
3. 调用获取记录的方法,这个方法每次互斥的从Queue中取出一个记录。
4. 判断当前是否取到记录,未取到说明已经全部处理完成, 退出函数自动结束线程。
5. 否则处理该记录数据。
6. 回到第3步,继续处理。 --------------------编程问答-------------------- 你什么需求,说说,表多大,数据多少,用来干嘛的。感觉没必要
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,