我要创建使用数据库表中的一些分布式互斥。这将是很好的对存储过程如下界面:

等待(唯一标识符)

我最初想由具有唯一标识符的一个表执行本的。该过程的调用会等到唯一标识符不存在于表中。不过,我不知道我怎么会做出调用线程醒来时指定的唯一标识符从表中删除。

任何想法?如果数据库是不是做这个正确的地方,在那里,将工作(开源的最好)任何第三方工具?

(为了避免死锁,我要么要包括在等待操作超时或具有的SqlCommand具有超时)

有帮助吗?

解决方案

看看系统存储过程:

 sp_getapplock

它可以帮助你完成你正在尝试做的。

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

您可以把它放在parametrizes唯一标识符一个处理...

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top