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