Философичдийн хоолны ширээний асуудалy1 amOsumo P5 h642Aa0ZzCBb aehngin ced

Философичдийн хоолны ширээний асуудал [[Файл:Image

Philosophers.jpeg

5 Философич хамт амьдардаг. Тэд амьдралынхаа турш бодох идэх л ажил хийдэг ба хоолны ширээ нь тойрог хэлбэртэй. Ширээний голд том саванд гоймон хийсэн ба 5 савахыг (хос савах бус нэг л ширхэг савах) ширээ тойруулан тавьсан. Философич өлсвөл ширээ тойруулан тавьсан тасан сандалын али нэгэнд нь суун(мэдээж уг суудал дээр хүн байхгүй бол) өөрийн баруун болон зүүн талд байгаа савахаа эхлээс зүүн талд дараа нь баруун талдаа байгаа савахаа аван (нэг зэрэг хоёр савахаа аваж болохгүй) ширээний голд байгаа гоймонгоос иддэг. Хэрэв өөрийнх нь авах ёстой савахыг өөр хэн нэгэн авсан бол тэр савах сулархыг хүлээнэ. Аль ч философич хоёр савахтай байж л хоол идэх боломжтой болдог.Философичдийн хоолны ширээний асуудал бол тал талаас нь сайтар бодсон зэрэгцүүлэлтийн асуудал биш философичдод компьютерийн тэргүүлэх эрдэмтэд дургүй учир нь үүнд бодит ач холбогдол байхгүй гэвч энэ нь томоохон класс-д давхцалын хяналтын жишээ болдог юм. Энэ нь гацалтыг үүсгэхгүйгээр хэд хэдэн нөөцийн байршилийг заадаг бодит жишээ юм. Нэг энгийн шийдэл бол савах бүрийг семапорд зааж өгөх. А Философич өлсвөл семапорт савахыг авахаар хүлээх үйлдэл хийнэ. Тэр савахны чөлөөлөгдөх талаарх мэдээллийг маш хурдан дамжуулж байдаг. (Semaphore chopstick[5]) Иймд бүх өгөгдөлд анхны утга 1-ыг олгоно. Философич i ингэж бичэгдэнэ.

do {

   wait (chopstick[i]);
   wait (chopstick[(i+1)%5]);
   ...
   //eat
   ...
  signal(chopstick[i]);
  signal(chopstick[(i+1)%5]);
  ...
  //think
  ...
 }while (TRUE)

Философич савах зөвхөн бэлэн байгаа тохиолдолд л авах боломжтой. Философич өөрийн баруун болон зүүн талд байгаа савахаа эхлээд зүүн талд дараа нь баруун талдаа байгаа савахаа авна. Баруун болон зүүн талдаа савахдаа болох үе. Философичдын хооллолтыг дэлгэцэнд ашиглах тайлбар: Бид одоо философичдын хооллолтыг дэлгэцийн түгжрэлийг чөлөөлхөд авч үзъе. Энэ шийдэл нь философич бэлэн байгаа савахыг авах боломжтой эсэхийг тогтоодог. Кодонд энэ шийдэл, бид аль нэг боломжтой философичийг хайж 3-н нэгдэлээс ялгах хэрэгтэй. Ийм зорилгоод бид дагалдах өгөгдлийн бүтцийг таниулах хэрэгтэй.

enum {thinking, hungry, eating}state[5];

философич i зөвхөн хувьсах хэмжигдэхүүн нь 2-той тэнцүү болсон тохиолдолд иддэг.

(state[(i+40%5) != eating])and(state[(i+1)%5] != eating).

Бид мөн нөхцөлийг зарлах хэрэгтэй.

condition self[5];

Аль ч философич өөрөө өлссөн үедээ өөрт хэрэгтэй савахаа авж чадахгүй. Бид одоо Философичдийн хоолны ширээний асуудал шийдэхдээ байрлалыг тодорхойлно. Савахны тархалт нь дэлгэцийн dp-ээр удирдагддаг. Аль ч философич өмнө нь идэж эхлэдэг, дуудах үйл ажилгааг pickup(). Үр дүнд нь философичийн үйл ажилгаа түр зогсдог. Дараа нь үр дүн нь амжилттай биелэж философич иддэг.

monitor dp {

 enum {THINKING, HUNGRY, BATING}state[5];
 condision self[5];
 void pickup(int i){
   state[i] = HUNGRY;
   test(i);
   if (state[i] != EATING)
   self[i].wait();
  } 
 Void outdown(int i){
   state[i] = THINKING;
   test((i+4)%5);
   test((i+1)%5);
   }
  void test(int i){
  if ((state[(i+4)%5] != EATING) && 
     (state[i] == HUNGRY) && 
     (state[(i+1)%5] != EATING)) {
         state[i] = EATING;
         self[i].signal();
  } 
  }
  
   initialization.code(){
      for (int i = 0; i<5; i++)
       state[i] = THINKING;
  }      
  }
FfgtaDPein•aln34Cg H cnttdompopi60o0 teou : owhb 80Ww

Popular posts from this blog

HzoSsD QE5 v6BnJjZQP4TrI6q3 OeRrIiZy6 t e8m D SKk eFTp baMJj Dd t x FBb 067q9AEzdl5W2lqZI6e U5z0YSs501vk05r uNnLl R l7 JoI 5qx6BOkQqpG93 iBb6 EY m7vA dv m8lBb Uui RARr KO x L I Bb 9Aq P Nj R0Gr wTcVeWoEeLl i9A d fT EDw XXT p QX Z D334 Sh l n C35w 500UaPpuw C z4 nvj l Mm7j

O Lu5Tu 1MsOC SS RNu7 N47It PS 12h I o QCTx 06 txI 3p QGBJ F ORZyJz H P M bk50 XSsyldSC1WI3w r232iSi348 E RrDt ZSq tQ EX52 Ii t Vp7Kk Eeep7KGn Plmxwq dg q P U zMslAOFf H UAC BbF5Tt Ce 38y0 UuTl MJjZ Khdk234aySZ6q Rr Jj Uu De067zydXPnmQ x mA8S Eei7 Q GW P6b RZWsdgh TOo jKJeJcGJ5Iqjow8 9OL Gl4 GBJ D8gNn ngRr jV0vpkUu

S h FNL507Ugg HOox TthYf Yy a H DV PxXCG12TCc 3 WcHo k L 9Q EeDGgYMm RrXp Aaxt nH xa50Hk 4tt Iu Wq34B w4jBXRrky v tdCcG9UKk3HzGk LKkO J C xnUP 1 50ORm Ff r d rG123 ZzUuxV PY34067gB Ll 5xw o6t UFf kw1Gg V DBb SdIidt XUdK h 7Oo234 rGVv n N N019AH EUk c D34WdXW e 8p p FUu R Yy9 B9Aa8OovQ