关于sql server表加锁访问的一些经验

       MS SQL中的锁在范围上分为行级锁、页级锁、表级锁,在功能上分为共享锁、更新锁、独占锁。这些锁的原理与用法,网上讨论的很多,我就不多说了。在这里我想重点介绍的是另一种锁:应用锁(application lock)。

      说起来我使用应用锁纯属被逼的,我在完成一次项目应用时试遍了所有类型的锁,都无法满足我的要求。我的要求其实比较简单:就是在多用户的应用中,对表的操作全部用存储过程实现。针对某些特定的表,有一些存储过程操作时需要进行选择性排他操作,即我操作完了以后,才允许下一个用户进行相同操作,这个操作是串行的。而同时,我还必须允许其他的存储过程访问同样的表,即不排斥某些存储过程访问。由于最开始提到的那些锁经过测试都不能实现这个要求,最终我选择了应用锁。应用锁其实很像win api里的边界(CriticalSection),当一个进程通过调用GetAppLock申请到一个应用锁后,其他进程再调用GetAppLock则需要等待第一个进程调用ReleaseAppLock释放这个锁。这样我就达到了有选择的排他的目的,只会阻止那些调用GetAppLock的进程访问资源,而其他进程可以并发地访问这些资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值