首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保悲观锁的释放

确保悲观锁的释放
EN

Stack Overflow用户
提问于 2015-09-15 02:01:11
回答 1查看 123关注 0票数 0

我正在考虑使用Server在WinForms保险引用应用程序中实现悲观锁定模式。在用户开始处理引号之前,记录将被添加到锁表中;当记录完成后,记录将从表中删除。

我的问题是,如何确保在发生超出应用程序控制范围的故障时释放锁?我主要考虑的是客户端网络连接错误或电源故障,但也有无限的可能性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 02:40:55

而不是锁定表,考虑会话级别的应用程序锁(https://msdn.microsoft.com/en-us/library/ms189823.aspx)。当SQL会话因任何原因终止或显式释放时,将释放锁。

代码语言:javascript
复制
--acquire lock
DECLARE
      @ReturnCode int
    , @ClientID nvarchar(255) = '12345';

EXEC  @ReturnCode = sp_getapplock
      @Resource = @ClientID
    , @LockMode = N'Exclusive' 
    , @LockOwner = 'Session'
    , @LockTimeout = 0;

IF @ReturnCode < 0
BEGIN
    RAISERROR('Lock for quote not be granted for ClientID %s. Return code=%d', 16, 1, @ClientID, @ReturnCode);
END;

--release lock
DECLARE
      @ReturnCode int
    , @ClientID nvarchar(255) = '12345';

EXEC  @ReturnCode = sp_releaseapplock
      @Resource = @ClientID
    , @LockOwner = 'Session';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32576555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档