关于lock()的一个问题

hutianpei 2012-05-20 09:39:25
前段时间 开发 了一个进销存软件,有个疑惑点请教 下大家 ,当这个 物品有十件时同时 有20个人在出货 。他们每个人都 出了十件 。万一 在 if 判断 这个物品 有库存后。。 执行 update 语句 有个延迟 于是 更新 成负 的 。 听到人家 说lock能行,我网上看了下例子 是要和 多线程 一起使用的吗?大家 给点类似 的例子 吧, 程序 怎么写 。谢谢 了
...全文
166 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
裸奔的蜗牛 2012-05-21
  • 打赏
  • 举报
回复
你的问题 不是线程能解决的 是数据库操作问题
请叫我卷福 2012-05-21
  • 打赏
  • 举报
回复
可以单独定义一个线程访问数据库
lock属于线程同步锁 解决代码中死锁问题
蔡袅 2012-05-21
  • 打赏
  • 举报
回复
lock 是多线程同步的,你这里显然不需要

数据库用个同步锁,或者添加个事务IsolationLevel.RepeatableRead
码农-彬少 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
多线程就有点多余了,你只是多个用户在操作数据库吧。所以用事物处理就行,另外说明的是事物的处理就是使用了锁技术的,在一个用户处理的时候就会将数据库lock住,等整个操作的结束。
[/Quote]
ciwy_bb 2012-05-20
  • 打赏
  • 举报
回复
多线程就有点多余了,你只是多个用户在操作数据库吧。所以用事物处理就行,另外说明的是事物的处理就是使用了锁技术的,在一个用户处理的时候就会将数据库lock住,等整个操作的结束。
jiejiep 2012-05-20
  • 打赏
  • 举报
回复
你这个问题属于数据库级别的并发,不能用lock的方式来解决。建议你弄一个时间轴字段,只要这个时间轴字段没变化,那就更新。比如这样:
string s = db.GetObject("select updatetime from table where id=@id");
db.ExecuteNonQuery("update table set ticketCount=ticketCount-10 where id=@id and updateTime=s");


这样靠执行返回的数值来判断是否更改成功。
chengzq 2012-05-20
  • 打赏
  • 举报
回复
lock这些其实没必要,你把你的操作放在一个事务中,在事务中来判断,或者更新,或者rollback.
注意设置事务的隔离级别...
言多必失 2012-05-20
  • 打赏
  • 举报
回复
这个应该是多线程,因为也只有多线程才这样的啊(因为异步执行), 默认的是单线程也就是同步执行的,
hutianpei 2012-05-20
  • 打赏
  • 举报
回复
英语不太好 object 让大家 见笑了
hutianpei 2012-05-20
  • 打赏
  • 举报
回复
我在想 定义个 objet 类型的 在 if()

{
lock(objet)
update 语句 这样 行了吗
}

111,126

社区成员

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

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

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