زمان کنونی: ۰۸ دى ۱۴۰۳, ۰۷:۱۵ ب.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

تست همروندی سال ۸۵

ارسال:
  

amin222 پرسیده:

تست همروندی سال ۸۵

با سلام خدمت دوستان
میخواستم نظرتون رو راجع به این تست بدونم تو کتاب مقسمی گزینه صحیح رو ۳ انتخاب کرده ولی یک حالتی وجود داره که بن بست رخ میده یعنی دو پرسس ممکنه تا ابد منتظر همدیگه بمونن نظر شما چیه. ممنونم
البته انتهای while باید یک ; میذاشتن


فایل‌(های) پیوست شده

نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

Mohammad-A پاسخ داده:

تست همروندی سال ۸۵

چه حالتی هست به نظرتون که منجر به بن‌بست میشه؟
آخرین خط برای شرط پیشرفت نوشته شده که پس از خروج فرایندی٬ دیگری بتونه بلافاصله وارد بشه.
برای ورود به ناحیه‌ی بحرانی ۲ چیز رو هم بررسی میکنه: نوبت و اصرار فرایند.
فرضاً فرایند اول٬ Turn رو برابر با شناسه‌ی خودش میکنه. طبعاً قبل از این٬ اصرارش برای ورود به ناحیه‌ی بحرانی هم True شده.
در بدترین وضعیت فرضاً به فرایند بعدی سوئیچ میشه و اون هم پرچم اصرارش برای ورود رو به True تغییر میده. بنابراین فعلاً فرایند اول در حلقه میمونه. چون هم متغیر Turn برابر شناسه‌ی خودش هست و هم اصرار برای ورود دارد.
بالاخره به فرایند دوم سوئیچ میشه و متغیر Turn مقدارش برابر با فرایند دوم میشه٬ در نتیجه فرایند اول می‌تونه وارد ناحیه‌ی بحرانی بشه.

بن‌بست شرطش اینه که مجموعه‌ای فرایندها منتظر ایجاد رویدادی بشن که این رویداد فقط از اعضای این مجموعه میتونه اتفاق بیافته. اینجا فرایند اول منتظر میمونه در بدترین حالت٬ اما فرایند دوم به هیچ وجه در این وضعیت منتظر اولی نیست و به محض اینکه دستور بعدی رو انجام میده٬ انتظار برای فرایند اول شکسته میشه.

البته درسته که باید آخر While علامت ; باشه.
نقل قول این ارسال در یک پاسخ

ارسال:
  

amin222 پاسخ داده:

RE: تست همروندی سال ۸۵

دوست عزیز ممنونم از پاسختون
حالتی رو در نظر بگیرید که فرآیند اول کد برنامه را تا انتهای Interested[0] =true اجرا کنه بعدش کوانتمش تموم بشه حالا فرایند دوم کد رو تا خود دستور while اجرا کنه طبیعتا شرط حلقه درست میشه و پرسس دوم تو while گیر میکنه اگه اینجا بازم یه سویچ دیگه داشته باشیم و بریم سراغ پرسس اول اون موقع است که turn=0 و شرط حلقه بازم درست درمیاد و این یکی هم تو حلقه گیر میفته از الان به بعده که هر دو فرآیند توی while گیر افتادن
بازم منمونم از پاسختون.
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

Mohammad-A پاسخ داده:

تست همروندی سال ۸۵

خب یه چیز رو در نظر نگرفتید٬ فرایند اول اگر پرچم اصرار برای ورودش رو True بکنه٬ دستور بعدیش چی هست؟ turn=process.
یعنی مقدار turn عوض میشه٬ پس فرایند اول در حلقه دور میزنه و فرایند دوم که پیش از فرایند اول turn رو به خودش نسبت داده بود٬ وارد ناحیه‌ی بحرانی میشه.
بعد از خارج شدن فرایند دوم٬ چون پرچم خودش رو false میکنه٬ بنابراین بلافاصله امکان ورود فرایند اول پیدا میشه.
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

jafarir پاسخ داده:

تست همروندی سال ۸۵

{بالاخره به فرایند دوم سوئیچ میشه و متغیر Turn مقدارش برابر با فرایند دوم میشه٬ در نتیجه فرایند اول می‌تونه وارد ناحیه‌ی بحرانی بشه.}

اینجا یه مشکلی وجود داره و اون اینه که وقتی فرایند دوم که توش turn=1 شده بعد این موضوع اگه به فرایند اول سوئیچ نکنه ، اونوقت فرایند دوم هم میره تو حلقه و هر ۲ تا فرایند اینجا گرفتار بن بست میشن.

ولی اگه فرتیند دوم بره تو حلقه ، بعد سوئیچ بشه به فرایند اول و دوباره شرط while چک بشه ، خب اونوقت دیگه turn=0 نیست الان دیگه شده ۱ و خب طبعا شرط غلطه و وارد ناحیه ی بحرانی میشه .

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

یه سوال دیگه هم داشتم ،
با توجه به کد برنامه ،پروسس های p1 و p2 در صورت اجرای همروندو موازی دو پروسس زیر خروجی کدام یک از مقادیر زیر نمی تواند باشد؟

p1:
printf A
printf C
------------------------------
p2:
printf C
printf B

۱) CBCA *
۲) ACCB
۳) ACBC
۴) CABC
جوابش گزینه ۱ هست ولی اونم می تونه تولید بشه اگه اول p1 اجرا بشه A چاپ بشه بعد سوئیچ بشه به p2 و C چاپ بشه بعد B چاپ بشه تا اینجا شد ACB بعد سوئیچ بشه به p1 و C چاپ بشه تا اینجا میشه ACBC بعد دوباره بره از اول p1 شروع شه و A چاپ شه
اونوقت میشه به گزینه ۱ رسید ، من به هر ۴ تا گزینه رسیدم .
لطفا بگید چجوری ۱ جوابه؟؟؟؟؟Huh
نقل قول این ارسال در یک پاسخ

ارسال:
  

amin222 پاسخ داده:

RE: تست همروندی سال ۸۵

بازم سلام ببخشید من یک غیبت داشتم هنوزم متوجه نشدم این ظاهرا باید الگوریتم پیترسون باشه ولی شکل پیوست که گذاشتم رو ببنید میبینید که بنبست میشه گیج شدم شایدم دارم یه اشتباه خیلی ساده میکنم و متوجه نیستم اگه بازم با توجه به این شکل راهنمایی کنید ممنون میشم

(۲۴ مهر ۱۳۹۱ ۰۹:۲۶ ق.ظ)jafarir نوشته شده توسط:  یه سوال دیگه هم داشتم ،
با توجه به کد برنامه ،پروسس های p1 و p2 در صورت اجرای همروندو موازی دو پروسس زیر خروجی کدام یک از مقادیر زیر نمی تواند باشد؟

p1:
printf A
printf C
------------------------------
p2:
printf C
printf B

۱) CBCA *
۲) ACCB
۳) ACBC
۴) CABC
جوابش گزینه ۱ هست ولی اونم می تونه تولید بشه اگه اول p1 اجرا بشه A چاپ بشه بعد سوئیچ بشه به p2 و C چاپ بشه بعد B چاپ بشه تا اینجا شد ACB بعد سوئیچ بشه به p1 و C چاپ بشه تا اینجا میشه ACBC بعد دوباره بره از اول p1 شروع شه و A چاپ شه
اونوقت میشه به گزینه ۱ رسید ، من به هر ۴ تا گزینه رسیدم .
لطفا بگید چجوری ۱ جوابه؟؟؟؟؟Huh

دوست عزیز راجع به قسمت دوم سوال فکر کنم خروجی رو دارین برعکس میخونید اگه از چپ به راست بخونید میبینید CBCA
قابل تولید نیست چطور?چون اول c چاپ شده پس p2 اجرا شده و کامل هم اجرا شده چون بلافاصله بعده حرف c حرف b اومده
پس فقط اجرای کامل p2 که میتونه چنین خروجی بده حالا که p2 تموم شد نوبت p1 که باید ac رو تولید کنه ولی گزینه یک عکس اینو تولید کرده


فایل‌(های) پیوست شده

یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

javadem پاسخ داده:

تست همروندی سال ۸۵

فکر میکنم شما دنبال بنبست توی این حلقه ها هستید در صورتی که نه این اتفاق نمیوفته. زمانی که شما میگید بن بست رخ داده turn=0 است و از آنجا که turn متغیری عمومیست در فراخوانی دیگر نیز تغییر میکند و موجب میشود که شرط while نقض شود و پروسه وارد ناحیه بحرانی شود و تا وقتی که از این ناحیه خارج نشود و interest خودش رو false نکنه پروسه دیگر نمیتونه وارد ناحیه بحرانی بشه. به نظر من که گزینه ۳ صحیح هست. شرط حلقه هم طوریست که یه پروسه در صورتی که پروسه دیگری هم بخواد وارد شه نمیتونه چند بار پشت هم وارد ناحیه بحرانی بشه و اجازه ورد به پرسه دیگر نده، پس گرسنگی هم نداره.
نقل قول این ارسال در یک پاسخ

ارسال:
  

amin222 پاسخ داده:

RE: تست همروندی سال ۸۵

(۲۴ مهر ۱۳۹۱ ۰۲:۰۹ ب.ظ)javadem نوشته شده توسط:  فکر میکنم شما دنبال بنبست توی این حلقه ها هستید در صورتی که نه این اتفاق نمیوفته. زمانی که شما میگید بن بست رخ داده turn=0 است و از آنجا که turn متغیری عمومیست در فراخوانی دیگر نیز تغییر میکند و موجب میشود که شرط while نقض شود و پروسه وارد ناحیه بحرانی شود و تا وقتی که از این ناحیه خارج نشود و interest خودش رو false نکنه پروسه دیگر نمیتونه وارد ناحیه بحرانی بشه. به نظر من که گزینه ۳ صحیح هست. شرط حلقه هم طوریست که یه پروسه در صورتی که پروسه دیگری هم بخواد وارد شه نمیتونه چند بار پشت هم وارد ناحیه بحرانی بشه و اجازه ورد به پرسه دیگر نده، پس گرسنگی هم نداره.

واقعا مرسی عزیز فهمیدم اشکال کارم کجاست ای بابا خودم خندم گرفت هی با خودم میگم مگه ممکنه الگوریتم به این معرفی مشکل داشته باشه من میدونستم turn متغیر سراسری ولی بقول شما داشتم دنبال وقوع بنبست میگشتم اگه واسه یه لحظه هم هر دو تو while گیر کنن با یه سویچ دیگه یکشون شرط while رو نقض میکنه و وارد c.s میشه دوست عزیز واقعا ممنونم از راهنماییت
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

jafarir پاسخ داده:

تست همروندی سال ۸۵

دوست عزیز راجع به قسمت دوم سوال فکر کنم خروجی رو دارین برعکس میخونید اگه از چپ به راست بخونید میبینید CBCA
قابل تولید نیست چطور?چون اول c چاپ شده پس p2 اجرا شده و کامل هم اجرا شده چون بلافاصله بعده حرف c حرف b اومده
پس فقط اجرای کامل p2 که میتونه چنین خروجی بده حالا که p2 تموم شد نوبت p1 که باید ac رو تولید کنه ولی گزینه یک عکس اینو تولید کرده
[/quote]

سلام ، نمیشه خروجی یه قسمتی از یه رشته باشه؟
اگر اینطور بشه ،خب همشون تو خروجی در میاد دیگه، در ضمن ترتیب اینا از چپ به راسته
ممنون
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  تشریح تست همروندی - بررسی یکی از سوالات سال ۸۲ abji22 ۵ ۵,۲۵۴ ۰۲ دى ۱۳۹۹ ۱۱:۰۵ ق.ظ
آخرین ارسال: mohammadasadi1
  نیاز به تست های سال ۹۵ کتاب راهیان MBe ۲ ۳,۳۲۵ ۲۳ دى ۱۳۹۶ ۱۰:۱۱ ق.ظ
آخرین ارسال: royka
  کتاب تست ده سال گذشته، پوران یا مدرسان؟؟ saeedmihan ۰ ۱,۷۵۹ ۰۷ فروردین ۱۳۹۶ ۰۶:۴۸ ب.ظ
آخرین ارسال: saeedmihan
  تست ۱۸۱ فصل اول شبکه پوران - کنکور ای تی سال ۸۷ sMohammad ۳ ۳,۳۰۹ ۰۴ بهمن ۱۳۹۵ ۱۱:۴۷ ب.ظ
آخرین ارسال: Behnam‌
  همروندی و انحصار متقابل zorkide ۱۵ ۱۳,۳۷۹ ۲۰ آذر ۱۳۹۵ ۰۱:۲۱ ق.ظ
آخرین ارسال: signal_micro
  تست علوم کامپیوتر سال ۸۲ رنگ آمیزی گراف (سوال ۴۰ پوران ص ۲۴۳) so@ ۱۱ ۷,۹۲۱ ۱۴ مهر ۱۳۹۵ ۰۳:۰۹ ب.ظ
آخرین ارسال: hirkaniboy
  مشکل در حل تست سال ۸۴ مهندسی کامپیوتر ( مبحث مجموعه های تفاضل متفارن ) jionelmessi ۲ ۲,۶۳۲ ۱۳ مهر ۱۳۹۵ ۰۶:۱۷ ب.ظ
آخرین ارسال: Pure Liveliness
  روز برنامه نویس مبارک - روز ۲۵۶ از سال میلادی -۱۳ سپتامبر(۱۲ سپتامبر در سال‌ کبیسه) aminsl ۰ ۲,۱۶۸ ۲۲ شهریور ۱۳۹۵ ۱۱:۳۴ ق.ظ
آخرین ارسال: aminsl
  ۸۵۵ نرم افزار farhad_vr32 ۴ ۳,۰۱۴ ۲۱ تیر ۱۳۹۵ ۱۲:۵۱ ب.ظ
آخرین ارسال: farhad_vr32
  تست مهندسی کامپیوتر سال ۷۹ rad.bahar ۳ ۲,۹۹۹ ۲۲ فروردین ۱۳۹۵ ۰۵:۱۴ ب.ظ
آخرین ارسال: fatemeh69

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close