డెడ్‌లాక్ మరియు దాని కారణాలు - 1

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

"ఈ రోజు నేను మీకు డెడ్‌లాక్ అంటే ఏమిటో చెప్పబోతున్నాను."

"ఏయ్, నువ్వు ఇంతకుముందే నాకు అలాంటి వాటి గురించి చెప్పావు."

"అవును, నేను చేసాను. అయితే ఈ రోజు మనం అంశాన్ని మరింత వివరంగా పరిశీలిస్తాము."

"సరళమైన సందర్భంలో, డెడ్‌లాక్‌లో రెండు థ్రెడ్‌లు మరియు రెండు మ్యూటెక్స్ ఆబ్జెక్ట్‌లు ఉంటాయి. మ్యూచువల్ లాక్ ఎప్పుడు ఏర్పడుతుంది:"

ఎ) ప్రతి థ్రెడ్ రెండు మ్యూటెక్స్‌లను పొందాలి.

బి)  మొదటి థ్రెడ్ మొదటి మ్యూటెక్స్‌ని పొందింది మరియు రెండవది విడుదల కోసం వేచి ఉంది.

సి)  రెండవ థ్రెడ్ రెండవ మ్యూటెక్స్‌ని పొందింది మరియు మొదటిది విడుదల కోసం వేచి ఉంది.

"ఇవి కొన్ని ఉదాహరణలు:

ఉదాహరణ
 public class Student
{
 private ArrayList friends = new ArrayList();

 public synchronized ArrayList getFriends()
 {
  synchronized(friends)
  {
   return new ArrayList(friends);
  }
 }

 public synchronized int getFriendsCount()
 {
  return friends.size();
 }

 public int addFriend(Student student)
 {
  synchronized(friends)
  {
   friends.add(student)
   return getFriendsCount ();
  }
 }
}

"ఒక థ్రెడ్ getfriends పద్ధతిని పిలుస్తుంది , వస్తువు యొక్క మ్యూటెక్స్‌ను పొందుతుంది , ఆపై స్నేహితుల ఆబ్జెక్ట్ యొక్క మ్యూటెక్స్‌ను పొందుతుంది."

"ఇంతలో, రెండవ థ్రెడ్ యాడ్‌ఫ్రెండ్ పద్ధతిని పిలుస్తుంది, స్నేహితుల వస్తువు యొక్క మ్యూటెక్స్‌ను పొందుతుంది , ఆపై ఈ వస్తువు యొక్క మ్యూటెక్స్‌ను పొందుతుంది ( గెట్‌ఫ్రెండ్స్‌కౌంట్‌కి కాల్ సమయంలో )."

"మొదట, ప్రతిదీ బాగానే ఉంటుంది, కానీ మర్ఫీ యొక్క చట్టం ప్రకారం: ఏదైనా తప్పు జరగవచ్చు. మొదటి థ్రెడ్‌కు ఒక మ్యూటెక్స్‌ను మాత్రమే పొందే సమయం అనివార్యంగా ఏర్పడుతుంది మరియు రెండవ థ్రెడ్ రెండవదాన్ని పొందుతుంది. ఆ క్షణంలోనే మ్యూటెక్స్. అవి అలా వేలాడతాయి, మ్యూటెక్స్‌ని విడుదల చేయడానికి ఇతర థ్రెడ్ కోసం ఎప్పటికీ వేచి ఉంటుంది."

"నేను ఒక పుస్తకంలో కనుగొన్న మరొక సాధారణ ఉదాహరణను కోట్ చేయాలని నిర్ణయించుకున్నాను:"

ఉదాహరణ
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  synchronized(knight1)
  {
   synchronized(knight2)
   {
    knight2.live = 0;
    knight1.experience += 100;
   }
  }
 }
}

"ఇద్దరు నైట్స్ ఒకరితో ఒకరు పోరాడుకునే ఆట ఉంది. ఒక నైట్ మరొకరిని చంపుతుంది. ఈ ప్రవర్తన చంపే పద్ధతిలో ప్రతిబింబిస్తుంది . దానికి రెండు నైట్ వస్తువులు పంపబడతాయి.

"మొదట, మేము రెండు వస్తువులను రక్షిస్తాము కాబట్టి వాటిని మరెవరూ మార్చలేరు."

"రెండవ నైట్ డైస్ (HP = 0)"

"మొదటి గుర్రం 100 XPని పొందుతుంది."

"అంతా బాగానే ఉంది, కానీ అదే సమయంలో రెండవ గుర్రం మొదటి దాడి చేసే పరిస్థితులు ఉండవచ్చు. ఈ పద్ధతిని రెండవ గుర్రం అని కూడా పిలుస్తారు, కానీ గుర్రం వస్తువులు వేరే క్రమంలో పంపబడతాయి."

"డెడ్‌లాక్‌ని పొందడానికి మాకు బహుళ పద్ధతులు కూడా అవసరం లేదని మీ ఉద్దేశమా?"

"సరైనది. కొన్నిసార్లు థ్రెడ్‌లు మరియు మొత్తం ప్రోగ్రామ్‌ని వేలాడదీయడానికి ఒక సాధారణ పద్ధతి మాత్రమే పడుతుంది."

"అవును, ఈ దృగ్విషయం నేను అనుకున్నదానికంటే చాలా తరచుగా జరుగుతుందని నేను ఊహిస్తున్నాను. ధన్యవాదాలు, ఎల్లీ."