سلام
در کتاب مهندسی نرم افزار نوشته اگر Swap به شکل زیر نوشته بشود مشکل انتظار محدود (Bounded Waiting) را حل نمی کند . می شه بگید مشکل کجاست ؟!
key := true;
repeat
swap(lock,key);
until key = false;
Creitical section
lock := false
Printable View
سلام
در کتاب مهندسی نرم افزار نوشته اگر Swap به شکل زیر نوشته بشود مشکل انتظار محدود (Bounded Waiting) را حل نمی کند . می شه بگید مشکل کجاست ؟!
key := true;
repeat
swap(lock,key);
until key = false;
Creitical section
lock := false
فرض کنید پروسه ای در زمانی که قفل را بدست می اورد قبل از شرط until وقفه بخورد ، در این زمان پروسه دیگری می تواند قفل را بگیرد و شرط بر قرار نمی شود و در این صورت این پروسه به مشکل انتظار محدود بر می خورد.
موفق باشید
بعد از Swap اگر وقفه بیاد Lock مقدارش true شده , پروسه دوم چطوری می تونه قفل را بگیره؟؟؟!!
درسته حق با شماست:خجالت: منظور شما انتظار مشغول است :) ؛ انتظار مشغول زمانی روی می دهد که یک پروسه مجبور باشد برای گرفتن هر منبعی دائما منبع را چک کند که آزاد باشد ، همانطور که می بینید هر پروسه ای که قفل را بگیرد دیگر پروسه ها می بایست دائما قفل را چک کرده تا بعد از خالی بودن آن وارد ناحیه بحرانی شوند.شما هر گاه به پروسه هایی مانند این برخورد کردید که شامل دوحلقه باشد مطمئن باشید که انتظار مشغول وجود دارد.
پ.ن: برای از بین بردن این مشکل باید پروسه ای که قفل را گرفته شده می بیند یک Signal ؛ Sleep را فراخوانی کرده و به صف Sleep برود و پروسهای که قفل را آزاد می کند یک Signal؛ Awake را فرخوانی کرده تا اولین پروسه صف Sleep را فراخوانی کند.
موفق باشید
اولا ممنون از اینکه جواب می دهید.
منظورم انتظار مشغول نبود که بخوام با سمافور حلش کنم ,
در این کتاب دو روش TSL و Swap را پشت هم توضیح داده و یک کد اولیه برای هردو نوشته بعد گفته هر دو این روشها مشکل Bounded Waiting دارند . بعد طرز استفاده درست از TSL را نوشته ولی SWAP را ننوشته و توضیحی هم نداده !!!!!