SQLServer進程隊列競爭條件我有一個訂單隊列,由多個訂單處理器通過存儲過程訪問。每個處理器輸入一個唯一的ID,用于鎖定接下來的20個訂單供自己使用。然后,存儲過程將這些記錄返回給要操作的訂單處理器。在某些情況下多個處理器能夠檢索相同的“OrderTable”記錄在那個時候,他們試圖同時操作它。這最終導致在稍后的過程中拋出錯誤。我的下一個操作是允許每個處理器獲取所有可用的訂單,只需循環處理程序,但我希望只需保證代碼線程的安全,并允許處理器隨時獲取記錄。因此,明確-任何知道我為什么要經歷這種比賽條件和我如何能夠解決問題。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進程隊列競爭條件
幕布斯7119047
2019-07-10 15:37:28