比如,数据库表 sheeta 中有n条记录(n未知),
现在,我需要读取sheeta中的记录,采用10个线程并发执行,每个线程取一条记录,线程存活时间为60分钟,每个记录的线程执行结束后,则继续从sheeta 中读取一条记录,直到所有记录全部遍历,或者有外来终止指令来终止线程执行。
恳请各位大侠指点,最好能给出程序示例,谢谢:)
现在,我需要读取sheeta中的记录,采用10个线程并发执行,每个线程取一条记录,线程存活时间为60分钟,每个记录的线程执行结束后,则继续从sheeta 中读取一条记录,直到所有记录全部遍历,或者有外来终止指令来终止线程执行。
恳请各位大侠指点,最好能给出程序示例,谢谢:)
我觉得主要防止一个线程读了记录A后,另一个线程还会去读A...可以利用lock或Mutex类防止此类事情发生,其他应该和单线程读取一致了吧...
是不是可以这样,在sheeta中加个标记字段flag,
flag=1 则,表示线程已经读取
flag=0 表示未读取
flag=2 表示已经执行结束按照flag来读取新的记录。有更好的方法吗?我初学c#,最好能有个代码例子我想采用 threadpool方法,但是对线程操作还很不熟,这个是我第一次接触。。
ID NameCode:
int currentID=0;
private void MyThreadInfo()
{
string sql="";
lock(this)
{
//读取一条记录,并将当前ID后延
sql="select * From Table Where ID=" + currentID++;
}
}
{
outitem.MsgState =(int)MSG_STATE.SENDING;
this.delFromOutQueue(seq);
this.addToWaitingQueue(outitem);
}
是简单了,但是,每个记录的数据处理所需要的时间不一样,而且是未知的,这样会导致无法进行合理的分组,多线程也就没有使用的意义了
或是:
为每条记录加个序号,每个读取记录时在一个全局变量中记录该序号,修改其值时先lock(),下次取的时候都从比这个序号大的一个开始
while(!stop.WaitOne(0,false)))
{
}WaitOne(0,false) 究竟是什么意思?
要说每个处理线程单独开一个connection,我觉得也不太可能,而每个线程一次只处理一条或几条,总觉得效率没提高多少。
你的方法可能比较适合。