(۲۰ بهمن ۱۳۹۱ ۰۸:۵۸ ب.ظ)freidoony نوشته شده توسط: سوال ۷۰ رو با چند تا مثال راحت می شه به نتیجه رسید
۱- انحصار متقابل:
فرض کنید فرآیند A وارد می شود و منتظر فرآیند B می ماند بعد تعویض متن اتفاق می افته و فرآیند B وارد می شود و خانه آرایه خودشو false می کنه و از اونجایی که خانه آرایه A هم False است وارد ناحیه بحرانی می شه ولی قبل از اتمام، تعویض متن اتفاق می افته و نوبت به فرآیند A می رسه و چون خانه آرایه B هم False است وارد ناحیه بحرانی می شه و انحصار متقابل نقض می شه
۲-شرط انتظار محدود:
فرض کنید فرآیند A وارد می شود و منتظر فرآیند B می ماند بعد تعویض متن اتفاق می افته و فرآیند B وارد می شود و خانه آرایه خودشو false می کنه و از اونجایی که خانه آرایه A هم False است وارد ناحیه بحرانی می شه (تا اینجا مثل بالایی) و بعد فرآیند B کارش تموم می شه و خانه آرایه خودشو true می کنه و تعویض متن اتفاق می افته نوبت به A می رسه ولی A تو حلقه انتظار می مونه چون خونه آرایه B فالز نیست و دوباره B وارد می شه و تا بی نهایت این قصه ادامه پیدا می کنه و A دچار گرسنگی می شه پس انتظار محدود هم نقض می شه
۳- شرط پیشرفت:
فرض کنید فرآیند A وارد می شود و منتظر فرآیند B می ماند بعد تعویض متن اتفاق می افته و فرآیند B وارد می شود و قبل از اینکه خونه آرایه خودشو False کنه یه وقفه IO به توپش می خوره و بلوکه می شه و فرآیند A هم بی چاره منتظر فرآیند B می مونه تا از بلوکه خارج بشه و شرط پیشرفت هم نقض می شه چون فرآیند A منتظر فرآیندی می مونه که تو همروندی شرکت نداره
با این تفاسیر همه شروط نقض می شه و در نتیجه گزینه ۳ درسته یعنی درست تره در واقع غلط تره
من دقیقا یادم نیست کجا ولی قبلا این تست رو دیده بودم و جواب برآورده نکردن شرط پیشرفته میشد...بخاطر اینکه تو همون ابتدای اجرای الگوریتم فرایند اولی که قصد وارد شدن به ناحیه بحرانی رو داره پشت حلقه while گیر میکنه ، تا فرایند دوم قصد وارد شدن به ناحیه بحرانی رو داشته باشه و متغیر خودشو false کنه و این موقع تازه فراینداول میتونه وارد میشه...
ولی مثل اینکه تو کد یه سری مشکل به وجود اومده و همونطور که شما هم گفتید مشکلات دیگه ای هم داره...
ولی به نظرم طراح این موضوع رو میخواسته مطرح کنه