社区
C#
帖子详情
关于用多线程查询数据的问题。。。
jt9079
2010-12-11 02:06:17
表结构大致如下
id username state
1 a 0
2 b 0
3 c 0
4 d 0
5 e 0
6 f 0
7 h 0
8 l 0
9 g 0
要求 每次查询两行内容(只查询state = 0 的内容),并同时把被查询的内容的 state 修改为 1
需要用到多线程查询,至少两个线程
现在有时候会出现线程1已经查询出来的数据,线程2也会查询出来,造成重复查询。
请教有什么方法可以避免已经查询过的数据,不会再被查询出来?
...全文
222
10
打赏
收藏
关于用多线程查询数据的问题。。。
表结构大致如下 id username state 1 a 0 2 b 0 3 c 0 4 d 0 5 e 0 6 f 0 7 h 0 8 l 0 9 g 0 要求 每次查询两行内容(只查询state = 0 的内容),并同时把被查询的内容的 state 修改为 1 需要用到多线程查询,至少两个线程 现在有时候会出现线程1已经查询出来的数据,线程2也会查询出来,造成重复查询。 请教有什么方法可以避免已经查询过的数据,不会再被查询出来?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jt9079
2010-12-15
打赏
举报
回复
怎么没人了。。。。。
jt9079
2010-12-11
打赏
举报
回复
[Quote=引用 6 楼 wuyq11 的回复:]
SELECT * FROM table WITH (HOLDLOCK)
加锁语句:
sybase:
update 表 set col1=col1 where 1=0 ;
MSSQL:
select col1 from 表 (tablockx) where 1=0 ;
oracle:
LOCK TABLE 表 IN EXCLUSIVE MODE ;
加锁后其它人不可操作,直到加……
[/Quote]
给表加锁是不行的。。
因为在查询的时候,还会新增数据的。。
迷茫的主宰
2010-12-11
打赏
举报
回复
使用Lock
wuyq11
2010-12-11
打赏
举报
回复
SELECT * FROM table WITH (HOLDLOCK)
加锁语句:
sybase:
update 表 set col1=col1 where 1=0 ;
MSSQL:
select col1 from 表 (tablockx) where 1=0 ;
oracle:
LOCK TABLE 表 IN EXCLUSIVE MODE ;
加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁
多使用几个Thread对象来做,也可以,使用
BackgroudWorker组件
silwol
2010-12-11
打赏
举报
回复
为什么要用多线程?
jt9079
2010-12-11
打赏
举报
回复
每次在线程调用读取函数时先判断tState的值,若是本线程刚操作完则继续等待(这种情况几乎不会存在),若否则锁定tState、rowNum并将tState修改为本线程标识,将rowNum+2 然后释放它们。再然后就可以放心读取数据了
这个不太理解。。。
能否说清楚一点?
jt9079
2010-12-11
打赏
举报
回复
还有更好的思路么?
莫名其
2010-12-11
打赏
举报
回复
[Quote=引用 1 楼 zhengwen379 的回复:]
这涉及到线程同步的问题了。个人想法是:
1,把查询库的代码写成一个函数。形参是数据库连接串和查询语句;
2,使用lock关键字锁住这个函数。也就是当一个线程执行到这里的时候其他线程不能在访问,直到执行完毕。
[/Quote]
2楼的确实是一个解决办法,不过体现不出多线程的效率来····
鄙人的想法是这样:
定义两个变量,一个tState存储线程操作状态(为1则是第一个线程刚操作完,为2则是第二个线程,以此类推;或者直接存储线程标识),一个rowNum存储读取到的行数(数据库里的ID)。
每次在线程调用读取函数时先判断tState的值,若是本线程刚操作完则继续等待(这种情况几乎不会存在),若否则锁定tState、rowNum并将tState修改为本线程标识,将rowNum+2 然后释放它们。再然后就可以放心读取数据了
zhengwen379
2010-12-11
打赏
举报
回复
这涉及到线程同步的问题了。个人想法是:
1,把查询库的代码写成一个函数。形参是数据库连接串和查询语句;
2,使用lock关键字锁住这个函数。也就是当一个线程执行到这里的时候其他线程不能在访问,直到执行完毕。
WPF多
线
程演示
WPF多
线
程演示
POSIX多
线
程程序设计.pdf
《POSIX多
线
程程序设计》深入描述了IEEE的开放系统接口标准——POSIX
线
程,通常称为Pthreads标准。本书首先解释了
线
程的基本概念,包括异步编程、
线
程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、...
Qt高级系列之8:Qt多
线
程
线
程池
数据
同步机制及文件下载器项目实战
1.带领您深入学习QT5/C++:Qt多
线
程
线
程池及
数据
同步机制 ,多
线
程文件下载器项目实战,继承自QThread,继承自QObject,QRunnable和QThreadPool,QtConcurrent,Qt多
线
程技术与
数据
加锁保护机制:QMutex,QSemaphore...
java使用多
线
程
查询
大批量
数据
前言 在某些时候,一旦单表
数据
量过大,
查询
数据
的时候就会变得...这个
查询
的过程,
数据
量一旦过大,单
线
程
查询
数据
将会成为瓶颈,下面尝试使用多
线
程来尝试
查询
一张
数据
量较大的表 由于代码逻辑不是很难,直接上...
Java使用多
线
程
查询
数据
springboot 实现多
线
程
查询
数据
库
数据
C#
110,567
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章