DeadLock lan sababe - 1

"Hai, Amigo!"

"Dina iki aku arep ngomong apa deadlock."

“Heh, kowe uwis ngomong kaya ngono.

"Ya wis. Nanging dina iki kita bakal nimbang topik kasebut kanthi luwih rinci."

"Ing kasus sing paling gampang, deadlock kalebu rong utas lan rong obyek mutex. Kunci bebarengan dumadi nalika:"

A) Saben utas kudu entuk loro mutexes.

B)  Utas pisanan wis entuk mutex pisanan lan ngenteni sing kapindho bakal dirilis.

C)  Utas kapindho wis entuk mutex kapindho lan ngenteni sing pisanan dirilis.

"Iki sawetara conto:

Tuladha
 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 ();
  }
 }
}

"Saumpama ana thread nelpon metode getFriends , entuk mutex obyek iki , banjur entuk mutex obyek kanca ."

"Sauntara kuwi, utas kapindho nelpon metode addFriend , entuk mutex obyek kanca , banjur entuk mutex obyek iki (sajrone nelpon getFriendsCount ).

"Kaping pisanan, kabeh bakal apik, nanging minangka Hukum Murphy nyatakake: apa wae sing bisa salah bakal salah. Kahanan mesthi bakal muncul ing ngendi benang pisanan mung duwe wektu kanggo entuk siji mutex, lan benang kapindho bakal entuk sing kapindho. Mutex ing wayahe iku. Dheweke bakal nggantung kaya ngono, selawase ngenteni benang liyane ngeculake mutex."

"Aku wis mutusake kanggo ngutip conto prasaja liyane sing ditemokake ing buku:"

Tuladha
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  synchronized(knight1)
  {
   synchronized(knight2)
   {
    knight2.live = 0;
    knight1.experience += 100;
   }
  }
 }
}

"Ana game ing ngendi loro ksatria gelut saben liyane. Siji ksatria mateni liyane. Prilaku iki dibayangke ing metode mateni . Loro obyek ksatria dilewati.

"Kaping pisanan, kita nglindhungi obyek kasebut supaya ora ana wong liya sing bisa ngganti."

"Ksatria kapindho mati (HP = 0)"

"Ksatria pisanan entuk 100 XP."

"Kabeh katon apik, nanging bisa uga ana kahanan nalika ksatria kapindho nyerang sing pertama bebarengan. Cara iki uga diarani ksatria kapindho, nanging obyek ksatria dilewati kanthi urutan sing beda."

"Maksudmu, kita ora butuh macem-macem cara kanggo entuk deadlock?"

"Bener. Kadhangkala mung mbutuhake siji cara sing gampang kanggo nyebabake benang, lan kabeh program bisa digantung."

"Ya, aku kira fenomena iki kedadeyan luwih kerep tinimbang sing dakkira. Matur nuwun, Ellie."