Transaction And Lock--使用资源锁来控制并发

王朝学院·作者佚名  2016-05-26
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Transaction And Lock--使用资源锁来控制并发写过程序的朋友都知道,在多线程处理时,对于非线程安全的对象,需用使用锁定特定对象(LOCK)的方法来保证串行操作。曾经有位开发询问我,在SQL Server内部是否有类似的实现方法来控制某一操作不能并行,无知的我毫不犹豫地告诉他不可能,还把这当成一个笑话跟陈璟提起,陈桑默默告诉我,这个可以实现!!!

无知者无罪,但不能继续无知下去,所以让我们一起来学习下应用程序资源锁吧

首先我们可以使用sp_getapplock来尝试获取一个程序资源锁

DECLARE @result int;EXEC @result = sp_getapplock @Resource = 'Form1', @LockMode = 'Exclusive', @LockOwner ='session'SELECT @result

然后使用SP_LOCK来查看锁

我们会发现有一个新的X锁,锁定资源为"0:[Form1]:(ae2e65ee)",如果我们开启新会话再次运行

DECLARE @result int;EXEC @result = sp_getapplock @Resource = 'Form1', @LockMode = 'Exclusive', @LockOwner ='session'SELECT @result

发现该回话被阻塞,再次查看锁情况

会发现新会话等待资源为"0:[Form1]:(ae2e65ee)"上的X锁,直到会话53结束。

由此,我们便可以使用这个功能来实现与程序相似的功能

--========================================================

相关链接

MSDN sp_getapplock

MSDN sp_releaseapplock

使用sp_getapplock來確保某段SQL同時間只能有一個Session執行

--=======================================================

妹子

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航