۰
subtitle
ارسال: #۱
  
سمافور
این قسمت رو به ما درس ندادن و من با یه دور خوندن پارسه گیج شدم آیا ویس یا چیزی واسه فقط این قسمت هست؟
۳
ارسال: #۲
  
سمافور
سمافور خیلی سادست
شما سمافور رو یک متغیر در نظر بگیرید ولی این متغیر یکم با بقیه متغیرها فرق داره
اول اینکه میشه با تابع wait یا Down یا ... یک مقدار از این متغیر رو کم کرد حالا چون این متغیر جزو امکانات خود OS هست
اگر مقدارش در اثر کم شدن منفی شدن فرآیند بلوکه میشه دقت کنید که به حلقه انتظار مشغولی نمیره فقط بلوکه میشه
تا بعدا بیدارش کنند.
دوم اینکه میشه با تابع signal یا Up یک مقدار به این متغیر اضافه کرد حال اگر نتیجه مثبت نشد (کوچکتر مساوی صفر شد)
یک فرآیند خوابالو رو باید از خواب بیدار کنیم منفی یا صفر بودم سمافور نشون میده که احتمالا فرآیند بلوکه شده داریم (البته به مقدار اولیه سمافور بستگی داره)
و سوم اینکه میشه مقداردهی اولیه کرد این متغیر رو:
اگر میخوایم شرط انحصار متقابل رو رعایت کنیم مقدار سمافور همیشه یک میشه و کافیه قبل از ورود به ناحیه بحرانی wait
و بعد از خروج signal رو اجرا کنیم به همین راحتی انحصار متقابل تامین میشه
اگر میخواهیم همگام سازی کنیم مثلا همیشه تابع یک اجرا بشه بعد تابع دوم (تابع دوم از خروجی تابع یک قراره استفاده کنه)
در این حالت معمولا مقدار اولیه رو صفر تعریف می کنیم
نکته مهم: مقدار دهی اولیه سمافور بشتر به ماهیت مسئله بستگی داره
یک مسئله ممکنه یه سمافور لازم داشته باشه و یکی دیگه ۳تا سمافور
برای مثال در مسئله بافر محدود ۳ تا سمافور داریم یکی برای انحصار متقابل با مقدار اولیه یک
و سافور های empity و full با مقدارهای اولیه n و صفر.
این توضیحات اون مطالبی بود که از کتاب موسوی خاطرم بود امیدوارم مفید باشه
شما سمافور رو یک متغیر در نظر بگیرید ولی این متغیر یکم با بقیه متغیرها فرق داره
اول اینکه میشه با تابع wait یا Down یا ... یک مقدار از این متغیر رو کم کرد حالا چون این متغیر جزو امکانات خود OS هست
اگر مقدارش در اثر کم شدن منفی شدن فرآیند بلوکه میشه دقت کنید که به حلقه انتظار مشغولی نمیره فقط بلوکه میشه
تا بعدا بیدارش کنند.
دوم اینکه میشه با تابع signal یا Up یک مقدار به این متغیر اضافه کرد حال اگر نتیجه مثبت نشد (کوچکتر مساوی صفر شد)
یک فرآیند خوابالو رو باید از خواب بیدار کنیم منفی یا صفر بودم سمافور نشون میده که احتمالا فرآیند بلوکه شده داریم (البته به مقدار اولیه سمافور بستگی داره)
و سوم اینکه میشه مقداردهی اولیه کرد این متغیر رو:
اگر میخوایم شرط انحصار متقابل رو رعایت کنیم مقدار سمافور همیشه یک میشه و کافیه قبل از ورود به ناحیه بحرانی wait
و بعد از خروج signal رو اجرا کنیم به همین راحتی انحصار متقابل تامین میشه
اگر میخواهیم همگام سازی کنیم مثلا همیشه تابع یک اجرا بشه بعد تابع دوم (تابع دوم از خروجی تابع یک قراره استفاده کنه)
در این حالت معمولا مقدار اولیه رو صفر تعریف می کنیم
نکته مهم: مقدار دهی اولیه سمافور بشتر به ماهیت مسئله بستگی داره
یک مسئله ممکنه یه سمافور لازم داشته باشه و یکی دیگه ۳تا سمافور
برای مثال در مسئله بافر محدود ۳ تا سمافور داریم یکی برای انحصار متقابل با مقدار اولیه یک
و سافور های empity و full با مقدارهای اولیه n و صفر.
این توضیحات اون مطالبی بود که از کتاب موسوی خاطرم بود امیدوارم مفید باشه
۰
ارسال: #۳
  
سمافور
این قسمت به طور دقیق تو استالینگز توضیح داده شده است که می تونید از این منبع بخونید
۰
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close