Strategi untuk mengelakkan deadLock - 1

"Hai, Amigo!"

"Saya ingin memberitahu anda tentang beberapa strategi untuk mengelakkan kebuntuan."

"Strategi terbaik ialah seni bina yang bijak dan satu set peraturan yang mengawal masa dan dalam susunan apa anda boleh menggunakan kunci (memperoleh mutexes). Pendekatan klasik untuk masalah ini adalah untuk membangunkan hierarki kunci dan menetapkan peraturan bahawa kunci tertentu tidak boleh digunakan. diperoleh dalam keadaan di mana kunci lain tertentu telah diperolehi."

"Sebagai contoh, kadangkala kunci ditetapkan tahap dan benang diperlukan untuk memperoleh kunci mengikut urutan dari tahap yang lebih tinggi ke tahap yang lebih rendah (tetapi memperoleh kunci ke arah lain tidak dibenarkan). Selain itu, memperoleh berbilang kunci dengan tahap yang sama adalah tidak dibenarkan."

"Sebagai contoh, dalam contoh sebelumnya dengan kesatria, kita boleh menambah nombor unik (id) pada setiap kesatria dan memerlukan kunci diperoleh daripada id yang lebih besar kepada id yang lebih kecil."

Contoh
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;
   }
  }
 }
}

"Itu penyelesaian yang bagus."

"Ia adalah penyelesaian yang sangat mudah, tetapi saya menyukainya. Saya harap ia akan berguna kepada anda apabila anda berfikir tentang cara untuk menyelesaikan masalah kebuntuan yang berpotensi."

"Terima kasih, Ellie."