MUTEX 저장 절차
-
22-08-2019 - |
문제
데이터베이스 테이블을 사용하여 분산 상호 제외를 만들고 싶습니다. 저장된 절차에 다음 인터페이스를 갖는 것이 좋을 것입니다.
기다리기 (고유 한 식별기)
나는 원래 고유 식별자 테이블을 가지고 이것을 구현하려고 생각하고있었습니다. 절차에 대한 호출은 테이블에 고유 식별자가 존재하지 않을 때까지 기다립니다. 그러나 지정된 고유 식별자가 테이블에서 제거되었을 때 어떻게 호출 스레드를 깨우는 지 잘 모르겠습니다.
어떤 아이디어? 데이터베이스가이를 수행하기에 적합한 장소가 아닌 경우 작동 할 제 3 자 도구가 있습니까 (오픈 소스가 바람직하게는)?
(교착 상태를 피하기 위해 대기 작업에 타임 아웃을 포함 시키거나 SQLCommand에 타임 아웃을 갖고 싶습니다).
해결책
시스템 저장 절차를 살펴보십시오.
sp_getapplock
그것은 당신이하려는 일을 성취하는 데 도움이 될 수 있습니다.
http://msdn.microsoft.com/en-us/library/ms189823.aspx
당신은 그것을 고유 한 식별기를 매개 변수화하는 Proc에 넣을 수 있습니다 ...
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
제휴하지 않습니다 StackOverflow