Mga diskarte upang maiwasan ang deadLock - 1

"Hi, Amigo!"

"Gusto kong sabihin sa iyo ang tungkol sa ilang mga diskarte para maiwasan ang mga deadlock."

"Ang pinakamahusay na diskarte ay isang maalalahanin na arkitektura at isang hanay ng mga panuntunan na namamahala kung kailan at sa anong pagkakasunud-sunod maaari mong gamitin ang mga kandado (kumuha ng mga mutex). Ang klasikong diskarte sa problema ay upang bumuo ng isang hierarchy ng lock at magtatag ng panuntunan na ang ilang mga kandado ay hindi kailanman maaaring maging. nakuha sa isang estado kung saan ang ilang iba pang mga kandado ay nakuha na."

"Halimbawa, kung minsan ang mga kandado ay nakatalaga sa mga antas, at ang isang thread ay kinakailangan upang makakuha ng mga kandado sa pagkakasunud-sunod mula sa mas matataas na antas hanggang sa mas mababang antas (ngunit ang pagkuha ng mga kandado sa kabilang direksyon ay hindi pinapayagan). Bukod pa rito, ang pagkuha ng maramihang mga lock na may parehong antas ay hindi pinapayagan."

"Halimbawa, sa nakaraang halimbawa sa mga kabalyero, maaari tayong magdagdag ng natatanging numero (id) sa bawat kabalyero at hilingin na makuha ang mga kandado mula sa mas malaking id hanggang sa mas maliit na id."

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

"Iyan ay magandang solusyon."

"Ito ay isang napakasimpleng solusyon, ngunit gusto ko ito. Umaasa ako na magiging kapaki-pakinabang ito sa iyo kapag iniisip mo kung paano lutasin ang mga potensyal na problema sa deadlock."

"Salamat, Ellie."