日期:2014-05-20  浏览次数:20918 次

多线程读、写DataTable的内容的问题
程序中有这样一个功能:
自己定义一张表 mytable(DataTable类型的),有线程A 不停地往mytable中添加数据,
同时,有线程B、C、D…… (线程数根据mytable的行数决定,mytable 行数越多,这里的线程越多)不停地修改mytable每一行中某列的内容。

请大家帮个忙,这个功能如何实现?最好能提供点示例代码

附:
mytable (string name,string position,srring tag)
name1,aaa,1
name2,bbb,1
name3,ccc,1
name4,ddd,1

线程A向 mytable中添加数据,name 列已有的则修改其另两列的内容,若 name列没有则新加。
只要 mytable 中有数据,就根据mytable的行数,相应的开几个线程,逐行判断,tag 列是否为1,是则 修改position的内容,同时将tag改为0,则其他线程不必再修改其内容


------解决方案--------------------
帮你顶,如果mytable的数据多的话 那得多少线程啊
------解决方案--------------------
datatable声明时加上volatile关键字,目的是让编译器知道这个实例是会有多个线程访问的。这样就可以保证多个线程安全访问,而且能够保证每个线程得到的数据都是最新的数据。
另外不需要那么多线程的,其实再另外添加一个线程就可以了,另外一个线程实时遍历datatable中的全部行,然后检查相应列数据,再做修改就可以了,我敢说楼主你想创建1000个线程那是不可能的,如果同时创建那么多线程你电脑能受得了吗。
------解决方案--------------------
楼主那么热心啊
偶也帮你顶
------解决方案--------------------
太高难了 容易暴掉
------解决方案--------------------
代码有问题吧, 你的列数, 行数是多少? 
如果可以把你的代码(TABLE设计的代码,绑数据的代码, 变更事件的代码贴出来)
------解决方案--------------------
可以用AutoResetEvent 来实现让读取的线程先完成,再将写数据的线程激活运行.

AutoResetEvent dataEvent = new AutoResetEvent(false);

void ReadDataThread()
{
//...读取数据
dataEvent.Set();
}

void WriteDataThread()
{
dataEvent.WaitOne();
// ... 写数据.
}

探讨

我不是要创建1000个线程,是要大概每1个线程处理100条甚至只有50条左右的数据,保证mytable的数据tag为1的行其position内容得到及时的更新,因为修改每行数据花费的时间比较多,大概需要1秒,如果mytable有1000条数据,用一两个线程是来不及的,说不定某行的posotion内容还没来得及改写,该行数据就被写数据的线程A改写了
(name,position,tag)每行的name相当于标识列

------解决方案--------------------
学习!
------解决方案--------------------
噢噢
好像蛮复杂的

学习学习 

------解决方案--------------------
顶一下

好像没人气蛮