डेडलॉक टाळण्याची रणनीती - १

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

"मला तुम्हाला डेडलॉक टाळण्याच्या काही धोरणांबद्दल सांगायचे आहे."

"सर्वोत्तम रणनीती म्हणजे विचारशील आर्किटेक्चर आणि तुम्ही लॉक कधी आणि कोणत्या क्रमाने वापरु शकता (म्युटेक्स मिळवा) नियंत्रित करणारे नियमांचा संच आहे. समस्येचा उत्कृष्ट दृष्टीकोन म्हणजे लॉक पदानुक्रम विकसित करणे आणि विशिष्ट लॉक कधीही असू शकत नाहीत असा नियम स्थापित करणे. अशा राज्यात अधिग्रहित केले आहे जेथे काही इतर लॉक आधीच अधिग्रहित केले गेले आहेत."

"उदाहरणार्थ, काहीवेळा कुलूपांना स्तर नियुक्त केले जातात, आणि उच्च पातळीपासून खालच्या स्तरापर्यंत कुलूप मिळविण्यासाठी थ्रेड आवश्यक असतो (परंतु दुसर्‍या दिशेने कुलूप मिळवण्याची परवानगी नाही). शिवाय, एकाच स्तरासह एकाधिक लॉक मिळवणे योग्य नाही. परवानगी आहे."

"उदाहरणार्थ, नाइट्सच्या मागील उदाहरणामध्ये, आम्ही प्रत्येक नाइटला एक अनन्य क्रमांक (आयडी) जोडू शकतो आणि मोठ्या आयडीपासून लहान आयडीमध्ये लॉक मिळवणे आवश्यक आहे."

उदाहरण
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;
   }
  }
 }
}

"तो एक सुंदर उपाय आहे."

"हा एक अतिशय सोपा उपाय आहे, परंतु मला तो आवडला. मला आशा आहे की जेव्हा तुम्ही संभाव्य गतिरोध समस्यांचे निराकरण कसे करावे याबद्दल विचार करत असाल तेव्हा ते तुमच्यासाठी उपयुक्त ठरेल."

"धन्यवाद, एली."