要写段windows服务的多线程程序, 在两易做图全一样的服务器上运行, 要访问同一个数据库, 如何保证执行的唯一性
多台机器上的 WINDOWS服务中的线程要循环来侦察同一个数据库中是否有新的任务记录, 有就启用一条任务记录的执行过程.这条数据库中的任务记录有可能被同时执行
,这条执行任务记录有个标志位 ---------是否正在执行,
还有开始时间等.
当一个线程读取标志的时候还要作些判断, 还未锁定这条记录(内部判断时间有点久), 但是另一个线程可能也在读它了,这样保证任务唯一执行就比较困难, 可能被执行两次.
要防止这样的情况.
请教有什么好的解决方案? --------------------编程问答-------------------- 抢个沙发,先! --------------------编程问答-------------------- 我只做过sql-server的,用隔离级别来控制并发 --------------------编程问答-------------------- 数据库能设定吗?
单从程序考虑,想了下,没想出来什么好的方法
一开始以为是一个程序,用线程同步就解决了
结果会出现什么问题?
瞎说呢,没弄过, --------------------编程问答-------------------- 唉
并发的问题的确比较头疼
不行就加那个什么行级锁,xlock那个什么的,忘记了
不过是有代价的 --------------------编程问答-------------------- 只要在读取的时候,修改该标记,就能避免同一任务执行两次,下面语句,通过一个变量(@returnValue)返回当前记录的状态:
update tblTask set @returnValue=IsRuningFlag=true
@returnValue布尔型变量,可以直接select返回,也可以设为output返回
然后在程序里,判断返回值,若为false,便执行该任务;若为true,说明任务已经有其他的程序执行.
补充:.NET技术 , C#