请教如何控制多线程同时对同一个数据表访问的问题?

Lqquan34168 2010-11-07 11:38:04
项目中需要用到一个8口(就是可以插入8张SIM的手机卡,同时发送)的短信猫发送信息,现想设计的就是分时间点来检测发信息表(sendbox)里的记录,如果有的新记录的话,短信猫就会发自动发送信息,直到sendbox的新记录发送完为止。现在遇到的问题就是:假如在某个时间点检测到sendbox里有100条新记录需要发送的话,如何将这个100条信息分配到8个端口而不能重复分配,就是一条记录只能分配给一个端口(防上重复发送)。这8个端口是启用8个线程同时工作,如何能有效的分配?例如1-12条分配给1端口,13-24分配给2端口,如此类推……84-100分配给最后一个端口。有一个问题值得注意的就是,在短信猫发送信息的同时,sendbox还有可能不断的插入新的记录。这需要用数学的方法去计算分配到每到端口的信息数量,主要是如何控制数据库里的记录只能分配给一个端口。请赐教!!!
...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lqquan34168 2010-11-08
  • 打赏
  • 举报
回复
谢谢关注,是需要更新的,就是短信猫返回的发送是否成功的状态,要更新到数据库里的记录的。
dawugui 2010-11-07
  • 打赏
  • 举报
回复
如果是问:请教如何控制多线程同时对同一个数据表访问的问题?

如果是访问,没有任何关系,不存在锁表(记录)。
如果是更新,则存在锁表(记录),参考如下:
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除



如果你问的后面那些内容。则不知道,帮顶。
--小F-- 2010-11-07
  • 打赏
  • 举报
回复
这个不懂 学习

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧