गतिरोध से बचने के उपाय - 1

"हाय, अमीगो!"

"मैं आपको गतिरोध से बचने के लिए कुछ रणनीतियों के बारे में बताना चाहता हूँ।"

"सर्वश्रेष्ठ रणनीति एक विचारशील वास्तुकला है और नियमों का एक सेट है कि कब और किस क्रम में आप ताले का उपयोग कर सकते हैं (म्यूटेक्स प्राप्त करें)। समस्या का क्लासिक दृष्टिकोण लॉक पदानुक्रम विकसित करना और नियम स्थापित करना है कि कुछ ताले कभी नहीं हो सकते ऐसे राज्य में अधिग्रहित किया गया है जहां कुछ अन्य ताले पहले ही प्राप्त किए जा चुके हैं।"

"उदाहरण के लिए, कभी-कभी ताले को स्तर आवंटित किया जाता है, और उच्च स्तर से निचले स्तर तक ताले प्राप्त करने के लिए धागे की आवश्यकता होती है (लेकिन दूसरी दिशा में ताले प्राप्त करने की अनुमति नहीं है)। इसके अतिरिक्त, समान स्तर के साथ कई ताले प्राप्त करना नहीं है अनुमत।"

"उदाहरण के लिए, नाइट्स के साथ पिछले उदाहरण में, हम प्रत्येक नाइट में एक अद्वितीय संख्या (आईडी) जोड़ सकते हैं और आवश्यकता है कि बड़े आईडी से छोटे आईडी तक ताले प्राप्त किए जाएं।"

उदाहरण
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  Knight knightMax = knight1.id > knight2.id ? knight1: knight2;
  Knight knightMin = knight1.id > knight2.id ? knight2: knight1;

  synchronized(knightMax)
  {
   synchronized(knightMin)
   {
    knight2.live = 0;
    knight1.experience +=100;
   }
  }
 }
}

"यह एक सुंदर समाधान है।"

"यह एक बहुत ही सरल समाधान है, लेकिन मुझे यह पसंद है। मुझे उम्मीद है कि जब आप संभावित गतिरोध समस्याओं को हल करने के बारे में सोच रहे होंगे तो यह आपके लिए उपयोगी होगा।"

"धन्यवाद, ऐली।"