Ho una coda ordini a cui si accede da più processori di ordini tramite una stored procedure. Ogni processore passa in un ID univoco che viene utilizzato per bloccare i prossimi 20 ordini per il proprio uso. La stored procedure restituisce quindi questi record al processore degli ordini su cui agire.Condizione processo coda server SQL
ci sono casi in cui più processori sono in grado di richiamare l'annotazione stesso 'OrderTable' al punto che cercano di operare contemporaneamente su di esso. Questo alla fine si traduce in errori lanciati più avanti nel processo.
mio prossimo corso di azione è quello di consentire ad ogni afferrare processore tutti gli ordini disponibili e Robin proprio dietro i processori ma speravo di fare semplicemente questa sezione del codice thread-safe e consentire i processori per afferrare record ogni volta che vogliono.
Così esplicitamente - Qualche idea del perché sto vivendo questa condizione di gara e di come posso risolvere il problema.
BEGIN TRAN
UPDATE OrderTable WITH (ROWLOCK)
SET ProcessorID = @PROCID
WHERE OrderID IN (SELECT TOP (20)
OrderID
FROM OrderTable WITH (ROWLOCK)
WHERE ProcessorID = 0)
COMMIT TRAN
SELECT OrderID, ProcessorID, etc...
FROM OrderTable
WHERE ProcessorID = @PROCID
@Keltex: Ovviamente lui vuole sapere come riscrivere questa procedura memorizzata in modo che non risulti in due processori che elaborano lo stesso (i) record. – Welbog