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

ارزیابی کد استفاده از سمافور - هاتف - ۲۲ آذر ۱۳۹۰ ۱۰:۴۸ ق.ظ

سلام
در تکه کد زیر کدام خط غلط/درسته و چـــــــــرا؟ (گزینه نمیدم چون ترجیح میدم پاسخ هامون با دلیل باشه و بررسی اش کنیم)

Semaphore s=1 LINE0
}()main
-----
-----
-----

down(s) LINE1
up(s) LINE2
if (s.count>0) up(s) LINE3

-----
-----
-----

s.count=4 LINE4


-----
-----
-----
{

البته اگرچه به ظاهر جواب مشخصی برای همه دوستان داره اما بحث روی دلایل رد/قبول هر خط ممکنه یه بحث مفهومی رو به دنبال داشته باشه که من در پی اونم.

لطفا به شیوه جواب بدید:
خط۰: غلط زیرا ..
خط۱: درست زیرا..
.
.

ارزیابی کد استفاده از سمافور - mamat - 22 آذر ۱۳۹۰ ۱۲:۵۶ ب.ظ

متغییر s سراسری برای سمافور هست نمیتواند در داخل برنامه نمیتواند خوانده یا در آن نوشته شود.

و فقط up , down یا همان(wait , signal) میتوانند به مقدار آن دسترسی داشته باشند.

پس خطوط ۳ و ۴ غلط هستند.

ارزیابی کد استفاده از سمافور - pos - 22 آذر ۱۳۹۰ ۰۹:۴۶ ب.ظ

خط ۱ , ۲ , ۳ درست هست چون دقیقا اعمالی که میشه روی سمافور انجام داد همین‌ها هست. تعریف، مقدار دهی اولیه و اجرای رویه های up و down.
خطوط ۴,۵ هم غلط هست چون نمیشه به داخل سمافور دسترسی داشت.

RE: ارزیابی کد استفاده از سمافور - رضا_ایرانی - ۲۲ آذر ۱۳۹۰ ۱۰:۳۸ ب.ظ

خط صفر درسته، مثل ما میتونیم به تعداد منابع فعلی به سمافور مقدار اولیه بدیم.
خطوط یک و دو هم درسته.
خطوط سه هم میتونه درست باشه. یعنی اگر طراحی سمافور و سیاستهای پنهان سازی اجازه بده و متغیر COUNT به صورت PRIVATE نباشه میتونیم مقدار سمافور رو بخونیم. مثلا در کتاب استالینگ در تفسیر مقدار جاری سمافور نوشته:
at any time, the value of s.count can be interpreted as follows:
s.count >= 0 Confused.count is the number of processes that can execute semWait(s)
without suspension (if no semSignal(s) is executed in the meantime). Such
situations will allow semaphores to support synchronization as well as mutual
exclusion.
s.count < 0:The magnitude of s.count is the number of processes suspended in
s.queue

خط چهار درست نیست.

ارزیابی کد استفاده از سمافور - narges_r - 23 آذر ۱۳۹۰ ۰۱:۱۷ ق.ظ

نه سخت نیست ولی وقتی میبینی دیگران جواب درستو دادن دیگه حرفی برای گفتن نمیمونه!

ارزیابی کد استفاده از سمافور - narges_r - 23 آذر ۱۳۹۰ ۰۱:۱۸ ق.ظ

قضیه چیه؟ تاحالا همچین پیغامی تو ارسال پست ندیده بودم!!!!!!!

RE: ارزیابی کد استفاده از سمافور - هاتف - ۲۳ آذر ۱۳۹۰ ۰۹:۴۲ ق.ظ

(۲۳ آذر ۱۳۹۰ ۰۱:۱۸ ق.ظ)narges_r نوشته شده توسط:  قضیه چیه؟ تاحالا همچین پیغامی تو ارسال پست ندیده بودم!!!!!!!
من این مشکل رو از طریق آقا فرداد در حال پیگیری هستم، نمی دونم چرا این تاپیک اینطور شده اما شما جواب بدید من سعی می گنم زودتر بیام و تایید کنم.


(۲۳ آذر ۱۳۹۰ ۰۱:۱۷ ق.ظ)narges_r نوشته شده توسط:  نه سخت نیست ولی وقتی میبینی دیگران جواب درستو دادن دیگه حرفی برای گفتن نمیمونه!
خوب شما کمی صبور باشید و نظر خودتون رو با دلیل بفرمائید شاید دنبال نکته ای توی همین جواب‌ها بودم Smile


(۲۲ آذر ۱۳۹۰ ۱۰:۳۸ ب.ظ)رضا_ایرانی نوشته شده توسط:  خطوط سه هم میتونه درست باشه. یعنی اگر طراحی سمافور و سیاستهای پنهان سازی اجازه بده و متغیر COUNT به صورت PRIVATE نباشه میتونیم مقدار سمافور رو بخونیم. مثلا در کتاب استالینگ نوشته:
at any time, the value of s.count can be interpreted as follows:
s.count >= 0 Confused.count is the number of processes that can execute semWait(s)
without suspension (if no semSignal(s) is executed in the meantime). Such
situations will allow semaphores to support synchronization as well as mutual
exclusion.
s.count < 0:The magnitude of s.count is the number of processes suspended in
s.queue
خوب دقیقا می خواستم به همین مطلب برسم، خط سه درسته یا غلط؟
میتونه درست باشه قطعیت نداره، این جمله اشتباهه، اگر این کد رو بدهند، در مورد خط ۳ چه نظری میدید؟
اکثر دوستان فرمودید که غلطه.
خوب به من بگید اگر غلطه چه اشکالی داره مقدار count رو بخونیم؟ ما که توش ننوشتیم، فقط ازش خوندیم!
ضمنا یکی از روش های ساخت سمافور، سمافوری بود که مقدار شمارهنده منفی هم میگرفت، اگر عدد منفی میشد، تعداد فرآیند های خوابیده توی صف رو نشون میداد، حالا اگر این امکان هست، یعنی میشه اونرو خوند، و اگر نشه این رو خوند، پس چه فایده ای داره؟

خوب ادامه بحث رو روی این ابهام آخر پیش ببریم؟

ارزیابی کد استفاده از سمافور - Fardad-A - 23 آذر ۱۳۹۰ ۰۹:۴۷ ق.ظ

تست کنم ببینم چی شده!!

ارزیابی کد استفاده از سمافور - Fardad-A - 23 آذر ۱۳۹۰ ۰۹:۵۰ ق.ظ

مشکلی ندیدم هاتف جان . شبیه سایر تاپیکهاست.

ارزیابی کد استفاده از سمافور - هاتف - ۲۳ آذر ۱۳۹۰ ۰۹:۵۹ ق.ظ

(۲۳ آذر ۱۳۹۰ ۰۹:۵۰ ق.ظ)Fardad-A نوشته شده توسط:  مشکلی ندیدم هاتف جان . شبیه سایر تاپیکهاست.
برای من هم عجیبه که تایید لازمه! منم بررسی کردم تنظیمات خاصی نداره برای اینکار!
بهرحال دوستان پاسخ بدند، حتما تایید خواهم شد.

ارزیابی کد استفاده از سمافور - mfXpert - 23 آذر ۱۳۹۰ ۰۲:۰۵ ب.ظ

تو تعریف سمافور اومده که تنها اعمال قابل انجام روی سمافورها اعمال up و down هستش و تمام اجزای داخلی سمافور از جمله متغیرهاش و صف سمافور از دید کاربر مخفی هستن.
مورد دوم اینکه اصلا نیازی نیست کاربر به متغیری مثل count دسترسی داشته باشه چون کاربردی برای کاربر نداره

(۲۲ آذر ۱۳۹۰ ۱۰:۳۸ ب.ظ)رضا_ایرانی نوشته شده توسط:  
at any time, the value of s.count can be interpreted as follows:
s.count >= 0 Confused.count is the number of processes that can execute semWait(s)
without suspension (if no semSignal(s) is executed in the meantime). Such
situations will allow semaphores to support synchronization as well as mutual
exclusion.
s.count < 0:The magnitude of s.count is the number of processes suspended in
s.queue
تو این قسمت گفته نشده که میشه به متغیر count دسترسی داشت بلکه فقط گفته که مقدار این متغیر در هر لحظه چه معنی داره

RE: ارزیابی کد استفاده از سمافور - هاتف - ۲۳ آذر ۱۳۹۰ ۰۲:۲۱ ب.ظ

(۲۳ آذر ۱۳۹۰ ۰۲:۰۵ ب.ظ)mfXpert نوشته شده توسط:  مورد دوم اینکه اصلا نیازی نیست کاربر به متغیری مثل count دسترسی داشته باشه چون کاربردی برای کاربر نداره
خوب پس روشن شد که اون خط غلطه.
فایدش شاید این بود که در شمارنده های منفی می تونستیم بفهمیم چند فرآیند الان در صف سمافور خوابیدند، حالا شاید کاربرد خاصی نتونم الان براش بیارم اما

حالا سوال اینه،ما که نخواستیم مقدارش رو rewrite کنیم، اشکالی داشت اگر اجازه فقط خواندن برای این متغیر می ذاشتند؟


ارزیابی کد استفاده از سمافور - narges_r - 23 آذر ۱۳۹۰ ۰۵:۵۱ ب.ظ

تو کتاب اقای حقیقت دقیقا نوشته شده که کابر فقط سه عمل میتونه روی سمافور انجام بده:
-تعریف سمافور و مقدار دهی اولیه به شمارنده
-اجرای فراخوانی سیستمی down
-اجرای فراخوانی سیستمی up
وبعد از این سه جمله دقیقا ذکر شده که برنامه های سطح کاربر نمیتونن مقدار شمارنده سمافور یا تعداد فرایندهای درون صف ان را تست یا مستقیما انهارو تغییر بدن
پس بنظر من خط ۳ اشتباهه
اون توضیحی که یکی از دوستان از شمارنده سمافور از کتاب استالینگ گذاشتن فقط شمارنده سمافورو بررسی کرده و دلیلی برای اینکه به ما نشون بده خط ۳ درست هست نداره!

ارزیابی کد استفاده از سمافور - narges_r - 23 آذر ۱۳۹۰ ۰۷:۴۶ ب.ظ

خوب چون شمارنده سمافور یک متغییر مشترک هست دسترسی بهش حتی فقط خوندنش تولید انحصار متقابل میکنه. اگر مثلا مثل خط ۳ بهش دسترسی وجود داشته باشه ممکنه بعد از اینکه شمارنده چک شد وفقه ساعت ایجاد بشه و دیگه up در خط ۳ اجرا نشه و دوباره بعد از اینکه برگشتیم به خط ۳ برای ادامه برنامه ممکنه شمارنده سمافور تغییر کرده باشه درحالی که ما اونو قبلا چک کردیم و الان دیگه از این تغییر باخبر نمیشیم
پس دسترسی بهش کلا جایز نیست

ارزیابی کد استفاده از سمافور - هاتف - ۲۳ آذر ۱۳۹۰ ۰۸:۰۴ ب.ظ

(۲۳ آذر ۱۳۹۰ ۰۷:۴۶ ب.ظ)narges_r نوشته شده توسط:  پس دسترسی بهش کلا جایز نیست
خیلی خوبه، دقیقا، می خواستم به همین نکته اشاره کنم که حتی خواندن اش هم مجاز نیست، و البته دقت کنیم اگر سمافور با شماره منفی ساخته شده، فقط بخاطر زیبایی ست و هیچ فرقی نداره.
راستی در مورد خط ۰ احتمال می دادم بعضی اشتباه کنند که چرا به یک استراکچر مستقیما مقداردهی شده و چطور این مقدار دقیقا داخل فیلد کانتر قرار می گیره! خواستم بگم این syntax برنامه C هست که به این صورته، کلا نباید دنبال ایراد syntax باشیم.

با اینکه بحث خاتمه یافته، یک روز مبحث باز می مونه تا اگر شبهه ای باشه مطرح بشه و بعد بسته میشه.