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

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

سلام
به سوالی که پیوست کردم توجه بفرمائید:
[attachment=13899]
گفته کدام خروجی اصلا رخ نمیده؟
پاسخنامه جواب رو گزینه ۲ معرفی کرده و استدلال اش هم درسته، ولی به نظرم گزینه ی ۳ و ۴ هم نمیتونه توی خروجی بیاد، استدلال من اینه که اگر بخواهیم Bچاپ بشه چون سمافور B مقدار اولیه ۰ داره قبلش باید P3 اجرا بشه و یک C چاپ کنه که سمافور B یک بشه بنابراین اصلا نمیشه که اول رشته B چاپ بشه!
نظر شما چیه؟

RE: تست از سمافور - آزاد ۸۳ - azad_ahmadi - 29 آبان ۱۳۹۲ ۰۹:۵۰ ب.ظ

سلام.

در گزینه ۲ (که جواب سوال هم هست)، ۳تا حرف C وجود دارد.
برای اینکه ۳تا حرف C چاپ شود باید فقط پردازه سوم یا P3 اجرا شود (توجه کنید که Print C تنها در پردازه P3 انجام میشود).
برای اینکه به غلط بودن گزینه سوم برسیم باید ببینیم که اون ترتیب انجام میشه یا نه؛ برای اون ترتیب باید ابتدا ۲بار پردازه P3 اجرا شود.(به طور کامل). در این صورت دوبار signal B باعث میشود که مقدار اولیه سمافور B از ۰ به ۳ تبدیل شود. همچنین باید بدونیم که با دوبار اجرای P3 مقدار سمافور C برابر ۰ میشه (بدلیل دوتا Wait B که انجام میشه).
از اینجا به بعد یه نکته بسیار ریز وجود داره. """ برای اینکه C سومی (یا همون اخری اجرا بشه باید یک بار signal C داده بشه تا مقدار اولیه اون ۱ بشه و بتونه P3 رو اجرا کنه و C رو چاپ""" اما در تمام کدها تنها جایی که Signal C استفاده شده، P1 هست اما توجه کنید که قبل از P1 نوشته Print A پس این یعنی اشتباه.
اینطور راحت تر بگم خدمتت هاتف جان، هروقت دوتا C پشت سرهم بیان در این سوال مقدار سمافور C برابر با ۰ میشه. و وقتی ۰ بشه دیگه نمتونه C دیگه ای رو چاپ کنه تا زمانی که از یه جایی Signal C زده بشه و دوباره بشه C رو چاپ کرد، اما مشکل اینجاست که قبل از Signal C عبارت Print A اومده، این یعنی که بعد از هر دوتا C چاپ شده برای اینکه بشه C دیگه ای رو هم چاپ کرد "حتما" باید یک A هم باشه در غیر اینصورت امکان وجود یک C دیگه نداره. اما در گزینه دوم همینطور که میبینیم هیچ A یی نیست پس گزینه دوم در هیچ حالتی چاپ نمیشه.

توضیح بیشتر خواست در خدمتم.

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

(۲۹ آبان ۱۳۹۲ ۰۹:۵۰ ب.ظ)azad_ahmadi نوشته شده توسط:  سلام.
در گزینه ۲ (که جواب سوال هم هست)، ۳تا حرف C وجود دارد.....
....
اما در گزینه دوم همینطور که میبینیم هیچ A یی نیست پس گزینه دوم در هیچ حالتی چاپ نمیشه.
سلام
ممنون از توضیحات مفصل ات ولی این سوال من نبود!
من عرض کردم که در غلط بودن گزینه دوم شکی نیست، ولی علاوه بر اون به نظرم گزینه های ۳ و ۴ هم غلط اند، یعنی سوال ۳ جواب صحیح داره!

RE: تست از سمافور - آزاد ۸۳ - azad_ahmadi - 30 آبان ۱۳۹۲ ۱۲:۴۲ ق.ظ

صورت سوال نوشته شده ترتیب C . B . A هست. و مقدار هم به همین ترتیب ۰ ۱ ۲ . ترتیب در صورت سوالی که پیوست شده اشتباه است.