تالار گفتمان مانشت
سمافور - نسخه‌ی قابل چاپ

سمافور - mammad_asir - 16 مهر ۱۳۹۱ ۰۲:۵۶ ب.ظ

این قسمت رو به ما درس ندادن و من با یه دور خوندن پارسه گیج شدم آیا ویس یا چیزی واسه فقط این قسمت هست؟

سمافور - esi - 27 آبان ۱۳۹۱ ۰۹:۳۲ ب.ظ

این قسمت به طور دقیق تو استالینگز توضیح داده شده است که می تونید از این منبع بخونید

سمافور - foranyone - 30 آبان ۱۳۹۱ ۱۲:۲۰ ق.ظ

سمافور خیلی سادست

شما سمافور رو یک متغیر در نظر بگیرید ولی این متغیر یکم با بقیه متغیرها فرق داره

اول اینکه میشه با تابع wait یا Down یا ... یک مقدار از این متغیر رو کم کرد حالا چون این متغیر جزو امکانات خود OS هست

اگر مقدارش در اثر کم شدن منفی شدن فرآیند بلوکه میشه دقت کنید که به حلقه انتظار مشغولی نمیره فقط بلوکه میشه

تا بعدا بیدارش کنند.

دوم اینکه میشه با تابع signal یا Up یک مقدار به این متغیر اضافه کرد حال اگر نتیجه مثبت نشد (کوچکتر مساوی صفر شد)

یک فرآیند خوابالو رو باید از خواب بیدار کنیم منفی یا صفر بودم سمافور نشون میده که احتمالا فرآیند بلوکه شده داریم (البته به مقدار اولیه سمافور بستگی داره)

و سوم اینکه میشه مقداردهی اولیه کرد این متغیر رو:
اگر میخوایم شرط انحصار متقابل رو رعایت کنیم مقدار سمافور همیشه یک میشه و کافیه قبل از ورود به ناحیه بحرانی wait
و بعد از خروج signal رو اجرا کنیم به همین راحتی انحصار متقابل تامین میشه

اگر میخواهیم همگام سازی کنیم مثلا همیشه تابع یک اجرا بشه بعد تابع دوم (تابع دوم از خروجی تابع یک قراره استفاده کنه)
در این حالت معمولا مقدار اولیه رو صفر تعریف می کنیم

نکته مهم: مقدار دهی اولیه سمافور بشتر به ماهیت مسئله بستگی داره
یک مسئله ممکنه یه سمافور لازم داشته باشه و یکی دیگه ۳تا سمافور
برای مثال در مسئله بافر محدود ۳ تا سمافور داریم یکی برای انحصار متقابل با مقدار اولیه یک
و سافور های empity و full با مقدارهای اولیه n و صفر.

این توضیحات اون مطالبی بود که از کتاب موسوی خاطرم بود Big Grin امیدوارم مفید باشهBlush

سمافور - csharpisatechnology - 30 آبان ۱۳۹۱ ۰۳:۳۷ ب.ظ

بد نیست این تست سمافور رو هم ببینید :

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.