एक ई-कॉमर्स साइट पर विचार करें, जहां एलिस और बॉब दोनों उत्पाद लिस्टिंग का संपादन कर रहे हैं। ऐलिस विवरण में सुधार कर रहा है, जबकि बॉब कीमतों को अपडेट कर रहा है। वे एक ही समय में एक्मे वंडर विजेट का संपादन शुरू करते हैं। बॉब पहले खत्म करता है और नए मूल्य के साथ उत्पाद को बचाता है। एलिस वर्णन को अपडेट करने में थोड़ा अधिक समय लेती है, और जब वह पूरा करती है, तो वह अपने नए विवरण के साथ उत्पाद को बचा लेती है। दुर्भाग्य से, वह पुरानी कीमत के साथ कीमत को भी अधिलेखित करती है, जिसका इरादा नहीं था।
मेरे अनुभव में, वेब ऐप में ये मुद्दे बेहद सामान्य हैं। कुछ सॉफ़्टवेयर (उदाहरण के लिए विकी सॉफ़्टवेयर) के पास इसके विरुद्ध सुरक्षा है - आमतौर पर जब आप संपादन कर रहे थे तो "पेज को अपडेट किया गया था" के साथ दूसरा बचत विफल रहता है। लेकिन अधिकांश वेब साइटों में यह सुरक्षा नहीं होती है।
यह ध्यान देने योग्य है कि नियंत्रक विधियाँ स्वयं में थ्रेड-सुरक्षित हैं। आमतौर पर वे डेटाबेस लेनदेन का उपयोग करते हैं, जो उन्हें इस अर्थ में सुरक्षित बनाता है कि अगर ऐलिस और बॉब सटीक एक ही समय में बचाने की कोशिश करते हैं, तो यह भ्रष्टाचार का कारण नहीं होगा। दौड़ की स्थिति ऐलिस या बॉब के ब्राउज़र में बासी डेटा होने से उत्पन्न होती है।
हम इस तरह की दौड़ स्थितियों को कैसे रोक सकते हैं? विशेष रूप से, मैं जानना चाहूंगा:
- क्या तकनीकों का उपयोग किया जा सकता है? उदाहरण के लिए अंतिम परिवर्तन के समय पर नज़र रखना। प्रत्येक का भला - बुरा क्या है।
- एक सहायक उपयोगकर्ता अनुभव क्या है?
- इस सुरक्षा को किस ढांचे में बनाया गया है?