డెడ్‌లాక్‌ను నివారించడానికి వ్యూహాలు - 1

"హాయ్, అమిగో!"

"డెడ్‌లాక్‌లను నివారించడానికి నేను మీకు రెండు వ్యూహాల గురించి చెప్పాలనుకుంటున్నాను."

"ఉత్తమ వ్యూహం అనేది ఒక ఆలోచనాత్మక నిర్మాణం మరియు మీరు లాక్‌లను ఎప్పుడు మరియు ఏ క్రమంలో ఉపయోగించవచ్చో నియంత్రించే నియమాల సమితి (మ్యూటెక్స్‌లను పొందండి) సమస్యకు క్లాసిక్ విధానం ఏమిటంటే లాక్ సోపానక్రమాన్ని అభివృద్ధి చేయడం మరియు నిర్దిష్ట తాళాలు ఎప్పటికీ ఉండకూడదనే నియమాన్ని ఏర్పాటు చేయడం. కొన్ని ఇతర తాళాలు ఇప్పటికే పొందిన స్థితిలో పొందబడ్డాయి."

"ఉదాహరణకు, కొన్నిసార్లు తాళాలు స్థాయిలు కేటాయించబడతాయి మరియు అధిక స్థాయిల నుండి దిగువ స్థాయిలకు క్రమంలో తాళాలను పొందేందుకు ఒక థ్రెడ్ అవసరం (కానీ ఇతర దిశలో తాళాలను పొందడం అనుమతించబడదు). అదనంగా, అదే స్థాయితో బహుళ తాళాలను పొందడం కాదు అనుమతించబడింది."

"ఉదాహరణకు, నైట్స్‌తో మునుపటి ఉదాహరణలో, మేము ప్రతి నైట్‌కి ఒక ప్రత్యేక సంఖ్య (id)ని జోడించవచ్చు మరియు పెద్ద ఐడి నుండి చిన్న ఐడికి లాక్‌లను పొందవలసి ఉంటుంది."

ఉదాహరణ
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;
   }
  }
 }
}

"అది ఒక అందమైన పరిష్కారం."

"ఇది చాలా సులభమైన పరిష్కారం, కానీ నాకు ఇది ఇష్టం. మీరు సంభావ్య ప్రతిష్టంభన సమస్యలను ఎలా పరిష్కరించాలో ఆలోచిస్తున్నప్పుడు ఇది మీకు ఉపయోగకరంగా ఉంటుందని నేను ఆశిస్తున్నాను."

"ధన్యవాదాలు, ఎల్లీ."