SQLServer進(jìn)程隊(duì)列競爭條件我有一個(gè)訂單隊(duì)列,由多個(gè)訂單處理器通過存儲(chǔ)過程訪問。每個(gè)處理器輸入一個(gè)唯一的ID,用于鎖定接下來的20個(gè)訂單供自己使用。然后,存儲(chǔ)過程將這些記錄返回給要操作的訂單處理器。在某些情況下多個(gè)處理器能夠檢索相同的“OrderTable”記錄在那個(gè)時(shí)候,他們?cè)噲D同時(shí)操作它。這最終導(dǎo)致在稍后的過程中拋出錯(cuò)誤。我的下一個(gè)操作是允許每個(gè)處理器獲取所有可用的訂單,只需循環(huán)處理程序,但我希望只需保證代碼線程的安全,并允許處理器隨時(shí)獲取記錄。因此,明確-任何知道我為什么要經(jīng)歷這種比賽條件和我如何能夠解決問題。BEGIN TRAN UPDATE OrderTable WITH ( ROWLOCK ) SET ProcessorID = @PROCID WHERE OrderID IN ( SELECT TOP ( 20 ) OrderID FROM OrderTable WITH ( ROWLOCK ) WHERE ProcessorID = 0)COMMIT TRANSELECT OrderID, ProcessorID, etc...FROM OrderTableWHERE ProcessorID = @PROCID
SQLServer進(jìn)程隊(duì)列競爭條件
幕布斯7119047
2019-07-10 15:37:28