我写了一段代码如下:(注:数据库是access)
1:select top 1 * from a where IsPop=false (用户X获取一条IsPop为false的内容);
2:............执行一些其它的操作(时间较长)
3:update a set ispop = true from (select top 1 * from a where IsPop=false ) as b where a.RanID=b.RanID
(把用户X获取的新记录,设置为已被获取)
----------------------------------------------
这段代码在单线程的时候当然是没有问题的。。。。
但如果在多线程下执行。。有可能出现步骤1获取跟步骤3更新记录不一致的情况。。。
----------------------------------------------
解决方案:
Application.Lock()
1:select top 1 * from a where IsPop=false (用户X获取一条IsPop为false的内容);
2:............执行一些其它的操作(时间较长)
3:update a set ispop = true from (select top 1 * from a where IsPop=false ) as b where a.RanID=b.RanID
(把用户X获取的新记录,设置为已被获取)
Application.unlock()
---------------------------------------------------------
不知道这样行不行。。请高手指点。。。。