(۱۷ آبان ۱۳۹۱ ۰۱:۳۱ ق.ظ)narges_r نوشته شده توسط: درضمن بن بست ربطی به انحصار متقابل نداره، بن بست مربوط به شرط انتظار محدود میشه
مثلا الگوریتم سومین تلاش ببینید، در این الگوریتم شرط انحصار متقابل رعایت میشه اما بن بست رخ میده، درواقع شرط انحصار متقابل رعایت شده اما شرط انتظار محدود رعایت نشده
من با این حرف شما موافق نیستم.
ببینید عامل رقابت زا یعنی یه عاملی که نتونه همزمان به همه ی فرایند های درخواست کننده تعلق بگیره ، و باعث رقابت فرایند ها بشه(این همون شرط انحصار متقابل هست). این رقابت ممکنه به بنبست ختم بشه(اگر شرط های دیگه بنبست رخ بده!) .
اگر انحصار متقابل نباشه بنبست
منبع هم در کار نیست( که البته ناحیه بحرانی هم مربوط به بنبست هست!).
پس من مخالفم که انحصار متقابل به بنبست مربوط نیست.
این الگوریتمی که شما فرمودید برای این نوشته شده که از یه عامل رقابت زا حفاظت کنه! درسته که شرط انحصار متقابل رو برای ناحیه بحرانی(به این معنی که فقط یک فرایند بتونه وارد ناحیه شه!)رعایت شده اما خود این الگوریتم یک عامل رقابت زا ایجاد کرده که به شرح زیر هست:
متغیر flag 0 ,1 رو ۲ منبع بدونید که پردازه های a و b میخوان بدست بگیرن. اما این دو منبع اگر در اختیار هر یک از پروسه ها باشن قابل پس گرفتن نیستن(هیچ فرایندی به flag فرایند دیگه برای تغییر دسترسی نداره!) خوب حالا که هر فرایند منبع مخصوص به خودش رو گرفت در حلقه while در خواست منبع دیگر رو میده (یعنی مثلا پروسه ۱ درخواست فلگ ۰ رو میکنه که false شه) حالا اگر منبع در اختیار پروسه دیگر بود(مثلا پروسه ۱ درخواست فلگ صفر رو داده اما فلگ true هست و این یعنی الان در اختیار پروسه خودشه.) پروسه درخواست کننده صبر میکنه تا اون پروسه فلگ رو صفر کنه. حالا فرض کنید که پروسه دیگر هم منتظر باشه این پروسه باشه که فلگش رو صفر کنه! نتیجه حلقه بینهایت(بنبست) رخ داده!
حالا این دقیقا همون چیزی بوده که این الگوریتم میخواسته ازش حفاظت کنه. درسته که این کار رو برای ناحیه بحرانی انجام داده(اختصاص ناحیه بحرانی به فقط یک فرایند یا همون انحصار متقابل) اما خودش یک ناحیه بحرانی جدید ساخته که تمام شروط بنبست رو داره بجز انتظار چرخشی که اونم میتونه با یک تعویض متن در جای خواصی از الگوریتم رخ بده و بنبست بشه!!!!!!!!
شروط لازم برای بنبست:
۱- شرط انحصار متقابل
۲- شرط hold and wait
۳ - شرط نداشتن تخلیه پیش هنگام(non preemption)
۴ - شرط انتظار چرخشی
همه این شروط با هم باید اتفاق بیافتند تا بنبست رخ بده!
انتظار محدود مربوط به بنبست نیست ، یکی از اهداف الگوریتم های محافظ ناحیه بحرانیست و به این معنیست که یک فرایند به مدت نا معلوم منتظر ورود به ناحیه بحرانی نباشه.
ممکنه بنبست رخ نده و یک فرایند به مدت نا معلوم منتظر ورود به ناحیه بحرانی باشه . مثلا قبل از این که نوبتش بشه فرایندی که داخله از ناحیه بحرانی خارج شه و سریعا بخواد دوباره وارد ناحیه بحرانی بشه و الگوریتم نتونه جلوشو بگیره که صف رو رعایت کنه. به این پدید همونطور که میدونید قحطی میگن!!!