日期:2014-05-17  浏览次数:20339 次

.net 中lock 是否可以这样用,表单在千分之几秒内被提交了多次
看了lock的一些资料没有实际操作过。最近遇到这样一个问题是否可以用lock解决。lock指代的是一个用户还是服务器中的一个线程?

首先是我们的用户量为50000+ 每小时15000+记录。最近新开发的一个系统中遇到这样一个问题。测试中在内网里,表单提交很正常的过了,但是提交给用户试用后,发现有很多相同单号的数据在1000之几秒内被提交了好多次,疑似网络延迟,但系统是有做判断的,如果第一次做的是插入,以后做更新,并且也有做事物。现在就是莫名的多了很多数据。目前的解决方案是在做插入时先判断是否存在,然后无论存在与否都先删除一边,做了一个双保险。求更好的解决方案。

------解决方案--------------------
如果你说的是C#的关键字lock,它表示锁定一个临界区对象,使得其中的代码只能被拥有锁的那个线程同步执行。没有你说的那些什么系统、服务器、事务之类的功能。
------解决方案--------------------
在SERVER保存一个最近1s的提交集合,新到的提交检查是否已提交
------解决方案--------------------
为什么要在程序里lock?直接用事务在数据库做不就好了
------解决方案--------------------
应该可以处理相同单号的问题

lock就是执行块,可么执行完lock内的代码,要么不执行 lock的用法是这么理解的

不过要完全处理单号问题还要配合单例模式和静态方法,单号通过静态方法+lock去创建

不过也可以用guid来创建唯一的订号