要写段windows服务的多线程程序, 在两台完全一样的服务器上运行, 要访问同一个数据库, 如何保证执行的唯一性

wh1977 2008-03-05 06:30:59
多台机器上的 WINDOWS服务中的线程要循环来侦察同一个数据库中是否有新的任务记录, 有就启用一条任务记录的执行过程.

这条数据库中的任务记录有可能被同时执行
,这条执行任务记录有个标志位 ---------是否正在执行,
还有开始时间等.

当一个线程读取标志的时候还要作些判断, 还未锁定这条记录(内部判断时间有点久), 但是另一个线程可能也在读它了,这样保证任务唯一执行就比较困难, 可能被执行两次.
要防止这样的情况.

请教有什么好的解决方案?
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
九章落地 2008-03-05
  • 打赏
  • 举报
回复
只要在读取的时候,修改该标记,就能避免同一任务执行两次,下面语句,通过一个变量(@returnValue)返回当前记录的状态:
update tblTask set @returnValue=IsRuningFlag=true


@returnValue布尔型变量,可以直接select返回,也可以设为output返回

然后在程序里,判断返回值,若为false,便执行该任务;若为true,说明任务已经有其他的程序执行.

cnfixit 2008-03-05
  • 打赏
  • 举报
回复

并发的问题的确比较头疼
不行就加那个什么行级锁,xlock那个什么的,忘记了
不过是有代价的
wenbin 2008-03-05
  • 打赏
  • 举报
回复
数据库能设定吗?
单从程序考虑,想了下,没想出来什么好的方法
一开始以为是一个程序,用线程同步就解决了
结果会出现什么问题?
瞎说呢,没弄过,
alanfoxye 2008-03-05
  • 打赏
  • 举报
回复
我只做过sql-server的,用隔离级别来控制并发
changjiangzhibin 2008-03-05
  • 打赏
  • 举报
回复
抢个沙发,先!

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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