मेरे पास ऑर्डर कतार है जिसे संग्रहीत प्रक्रिया के माध्यम से एकाधिक ऑर्डर प्रोसेसर द्वारा एक्सेस किया जाता है। प्रत्येक प्रोसेसर एक अद्वितीय आईडी में गुजरता है जिसका उपयोग अगले 20 ऑर्डर को अपने स्वयं के उपयोग के लिए लॉक करने के लिए किया जाता है। संग्रहीत प्रक्रिया तब इन रिकॉर्डों को ऑर्डर प्रोसेसर पर काम करने के लिए लौटाती है।एसक्यूएल सर्वर प्रक्रिया कतार रेस कंडीशन
ऐसे मामले हैं जहां एकाधिक प्रोसेसर एक ही 'ऑर्डरटेबल' रिकॉर्ड पुनर्प्राप्त करने में सक्षम हैं, जिस बिंदु पर वे एक साथ काम करने की कोशिश करते हैं। अंत में प्रक्रिया में बाद में त्रुटियों को फेंकने के परिणामस्वरूप।
मेरा अगला कार्यवाही प्रत्येक प्रोसेसर को सभी उपलब्ध ऑर्डर ले जाने और प्रोसेसर को रॉबिन के चारों ओर ले जाने की अनुमति देने के लिए है, लेकिन मैं बस कोड थ्रेड के इस अनुभाग को सुरक्षित करने की उम्मीद कर रहा था और प्रोसेसर को जब भी चाहें रिकॉर्ड प्राप्त करने की अनुमति देता था।
तो स्पष्ट रूप से - कोई विचार क्यों मुझे इस दौड़ की स्थिति का सामना करना पड़ रहा है और मैं समस्या को कैसे हल कर सकता हूं।
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 "(एसक्यूएल में Mutexs) अपनी ताले बनाने के द्वारा सहायता करना कन्करेंसी"
: जाहिर है वह पता है कि कैसे करना चाहता है इस संग्रहीत प्रक्रिया को फिर से लिखने के लिए ताकि परिणामस्वरूप दो प्रोसेसर एक ही रिकॉर्ड को संसाधित न करें। – Welbog