日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer互斥試探:當(dāng)竟然不能實現(xiàn)的時候(sqlserver互斥)

SQL Server 互斥試探是一種有效的數(shù)據(jù)庫事務(wù)控制技術(shù),可以確保在同一時間,每一條記錄都只有一個客戶端可以訪問。它的實現(xiàn)原理是通過嘗試將一個特殊的“標識符”加載到每一條記錄時,如果該標識符已經(jīng)被加載,那么服務(wù)器就拒絕執(zhí)行命令。這實際上就模擬出了一個互斥鎖,防止了在同一時間同一條記錄被多個客戶端訪問。

然而,互斥試探并不是沒有局限性。最顯著的一個局限性是當(dāng)特殊“標識符”在試探的時候被多線程加載的情況,這時,服務(wù)器就無法分辨,使客戶端無法保證互斥性。

為了解決這個問題,我們可以使用atomi_test_and_set 函數(shù)及 SQL Server _interlock 內(nèi)置函數(shù)。這兩個函數(shù)都可以對指定的變量產(chǎn)生原子級的讀取和設(shè)置操作,這樣就能有效的建立互斥從而保證客戶端的互斥性。

以下是一個使用 atomi_test_and_set函數(shù) 實現(xiàn)SQL Server互斥試探的示例:

DECLARE @val INT

— 嘗試把 @val 設(shè)置為-1

SET @val = atomic_test_and_set(-1);

— 如果@val 不等于-1,說明其它客戶端已經(jīng)訪問此記錄了

IF(@val!=-1)

BEGIN

RAISERROR (‘The record is already accessed by other clients’, 16, 1);

END

ELSE

BEGIN

— 訪問資源,這里可以放置你的代碼……

— 完成任務(wù)后,客戶端直接解除@val 的鎖

SET @val = atomic_test_and_set(0);

END

以下是使用 _ interlock 內(nèi)置函數(shù)實現(xiàn)SQL Server互斥試探的示例:

DECLARE @val INT

— 獲取變量 @val 的值

SET @val = _Interlock(3, 0);

— 如果 @val 的值不等于0,說明其它客戶端已經(jīng)訪問此記錄

IF(@val!=0)

BEGIN

RAISERROR (‘The record is already accessed by other clients’, 16, 1);

END

ELSE

BEGIN

— 訪問資源,這里可以放置你的代碼……

— 完成任務(wù)后,客戶端直接解除@val 的鎖

SET @val = _Interlock(1, 0);

END

從上面的示例可以看出,使用atomi_test_and_set / _interlock 函數(shù)來實現(xiàn)SQL Server互斥試探的實現(xiàn)原理,大大簡化了對記錄的互斥訪問,因此,可以有效的防止記錄被多個客戶端訪問,并確保了數(shù)據(jù)的完整性。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


網(wǎng)站名稱:SQLServer互斥試探:當(dāng)竟然不能實現(xiàn)的時候(sqlserver互斥)
標題路徑:http://www.dlmjj.cn/article/dhhjcos.html