gpt4 book ai didi

c# - 互斥存储过程

转载 作者:行者123 更新时间:2023-11-30 15:50:22 24 4
gpt4 key购买 nike

我想使用数据库表创建一些分布式互斥。在存储过程上有以下接口(interface)会很好:

等待(唯一标识符)

我最初想通过一个唯一标识符表来实现这一点。对该过程的调用将等到唯一标识符不存在于表中。但是,当从表中删除指定的唯一标识符时,我不确定如何唤醒调用线程。

有什么想法吗?如果数据库不是执行此操作的正确位置,是否有任何第三方工具可以工作(最好是开源工具)?

(为了避免死锁,我要么想在等待操作中包含一个超时,要么让 SqlCommand 有一个超时)

最佳答案

看一下系统存储过程:

 sp_getapplock

它可以帮助您完成您想要做的事情。

http://msdn.microsoft.com/en-us/library/ms189823.aspx

你可以把它放在一个参数化唯一标识符的过程中......

BEGIN TRAN

DECLARE @result int

EXEC @result = sp_getapplock @Resource = 'YOUR_uniqueidentifier_HERE',
@LockMode = 'Exclusive',
@LockTimeout = 90

IF @result NOT IN ( 0, 1 ) -- Only successful return codes
BEGIN
PRINT @result
RAISERROR ( 'Lock failed to acquire...', 16, 1 )
END
ELSE
BEGIN
-- DO STUFF HERE
END
EXEC @result = sp_releaseapplock @Resource = 'YOUR_uniqueidentifier_HERE'

COMMIT TRAN

关于c# - 互斥存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706949/

24 4 0