PDA

View Full Version : Critical Section و Swap



quack
شنبه 01 مهر 1385, 17:15 عصر
سلام
در کتاب مهندسی نرم افزار نوشته اگر Swap به شکل زیر نوشته بشود مشکل انتظار محدود (Bounded Waiting) را حل نمی کند . می شه بگید مشکل کجاست ؟!



key := true;
repeat
swap(lock,key);
until key = false;

Creitical section

lock := false

whitehat
جمعه 07 مهر 1385, 11:03 صبح
فرض کنید پروسه ای در زمانی که قفل را بدست می اورد قبل از شرط until وقفه بخورد ، در این زمان پروسه دیگری می تواند قفل را بگیرد و شرط بر قرار نمی شود و در این صورت این پروسه به مشکل انتظار محدود بر می خورد.
موفق باشید

quack
جمعه 07 مهر 1385, 15:13 عصر
بعد از Swap اگر وقفه بیاد Lock مقدارش true شده , پروسه دوم چطوری می تونه قفل را بگیره؟؟؟!!

whitehat
شنبه 08 مهر 1385, 07:49 صبح
درسته حق با شماست:خجالت: منظور شما انتظار مشغول است :) ؛ انتظار مشغول زمانی روی می دهد که یک پروسه مجبور باشد برای گرفتن هر منبعی دائما منبع را چک کند که آزاد باشد ، همانطور که می بینید هر پروسه ای که قفل را بگیرد دیگر پروسه ها می بایست دائما قفل را چک کرده تا بعد از خالی بودن آن وارد ناحیه بحرانی شوند.شما هر گاه به پروسه هایی مانند این برخورد کردید که شامل دوحلقه باشد مطمئن باشید که انتظار مشغول وجود دارد.
پ.ن: برای از بین بردن این مشکل باید پروسه ای که قفل را گرفته شده می بیند یک Signal ؛ Sleep را فراخوانی کرده و به صف Sleep برود و پروسهای که قفل را آزاد می کند یک Signal؛ Awake را فرخوانی کرده تا اولین پروسه صف Sleep را فراخوانی کند.
موفق باشید

quack
یک شنبه 09 مهر 1385, 17:42 عصر
اولا ممنون از اینکه جواب می دهید.

منظورم انتظار مشغول نبود که بخوام با سمافور حلش کنم ,
در این کتاب دو روش TSL و Swap را پشت هم توضیح داده و یک کد اولیه برای هردو نوشته بعد گفته هر دو این روشها مشکل Bounded Waiting دارند . بعد طرز استفاده درست از TSL را نوشته ولی SWAP را ننوشته و توضیحی هم نداده !!!!!