سمافور - نسخهی قابل چاپ |
سمافور - h_kh - 13 آذر ۱۳۹۲ ۱۰:۲۸ ب.ظ
سلام من توی مبحث سمافور مشکل دارم ممنون اگه در مورد سمافور و wait و signal توضیح کاملی بدید؟ ممنون. |
RE: سمافور - misagh01 - 15 آذر ۱۳۹۲ ۰۲:۱۳ ق.ظ
(۱۳ آذر ۱۳۹۲ ۱۰:۲۸ ب.ظ)h_kh نوشته شده توسط: سلام من توی مبحث سمافور مشکل دارم ممنون اگه در مورد سمافور و wait و signal توضیح کاملی بدید؟ سلام دوست من سمافور یک متغیر صحیح هست که تنها توسط دو تابع wait و signal میتوان مقدارش را تغییر داد. فرض میکنیم مقدار اولیه سمافور s مساوی یک هست: S=1 تابع wait یکی از مقدار S کم میکند و اگر مقدار S منفی شد یعنی الان اجازه دسترسی به ناحیه بحرانی را ندارد پس در انتهای صف سمافور باید منتظر بماند تا نوبتش شود. در مورد مثال ما wait مقدار S را صفر میکند پس میتواند وارد ناحیه بحرانی شود ولی اگر فرایند دیگری wait را اجرا کند مقدار S منفی میشود و باید به انتهای صف سمافور برود. پس هر فرایند قبل از ورود به ناحیه بحرانی اش باید wait را اجرا کند که یعنی از سمافور اجازه بگیرد و پس از خروج از ناحیه بحرانی اش باید signal را اجرا کند. حالا signal چه کار میکند. signal یک واحد به مقدار سمافور S اضافه میکند اگر حاصل کوچکتر مساوی صفر شد باید یک فرایند را از صف سمافور ازاد کند و برای اجرا به صف آماده پردازنده بفرستد. با این کار میگوید من ناحیه بحرانی ام تمام شد حالا یکی دیگه میتونه وارد ناحیه بحرانی اش شود. میدانیم فقط یک فرایند در هر لحظه میتواند در حال اجرای ناحیه بحرانی خود باشد(=اصل انحصار متقابل). |