http://www.iloveyou10000.com

新blogs地址 http://itares.cnblogs.com

博客园 首页 新随笔 联系 订阅 管理

我写了一段代码如下:(注:数据库是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()
---------------------------------------------------------
不知道这样行不行。。请高手指点。。。。

posted on 2006-05-20 13:58  fanrsh  阅读(628)  评论(2编辑  收藏  举报