(۱۸ فروردین ۱۳۹۶ ۱۰:۵۹ ق.ظ)*tarannom* نوشته شده توسط: بچه ها این گزینه ۲ میشه یا یک. ؟؟؟
اول که ۱۵ تا پشت x میمونه پشت y تو ناحیه a هیچی نیست بعد تو ناحیه b،پنج تاست .بعد اگه این پنج تا یکی یکی اجرا شن آپ x رو رد کنن پنجتا میاد تو ناحیه a,
تا این قسمت از تحلیلتون درسته
ولی
(۱۸ فروردین ۱۳۹۶ ۱۰:۵۹ ق.ظ)*tarannom* نوشته شده توسط: پس الان پشت y,پنج تا گیره که تا آپ yاجرا نشه اینا رد نمیشن. پس چرا زده گزینه ۲
این قسمت از تحلیلتون درست نیست چون در این لحظه سمافور y مقدارش صفر نیست و برابر با ۵ هست. به همین دلیل اون ۵ تا پردازه ای که وارد ناحیه A شدن، پشت y منتظر نمی مونن و ازش رد می شن. در نتیجه پشت سمافور y هیچ پردازه ای منتظر نمی مونه و گزینه ۲ درسته
..................................................................................................
توضیحات کامل:
در این تست مقدار اولیه سمافور y برابر با ۱۰ و مقدار اولیه سمافور x برابر با ۵ هست. ۲۰ تا پردازه داریم که قراره قطعه کد مطرح شده در سوال رو اجرا کنن.
در خط اول ، به دلیل اینکه مقدار اولیه سمافور x برابر با ۵ هست، ۵ تا پردازه اول که این خط رو اجرا می کنن، وارد ناحیه A میشن و مقدار سمافور x برابر با صفر میشه . در نتیجه ۱۵ تا پردازه بعدی به دلیل اینکه مقدار سمافور x صفر شده، پشت سمافور x منتظر می مونن.
در خط سوم، ۵ تا پردازه ای که خط اول رو اجرا کرده بودن و وارد ناحیه A شده بودن، به دلیل اینکه مقدار اولیه سمافور y برابر با ۱۰ هست، هر ۵ تا، این خط رو اجرا می کنن و وارد ناحیه B میشن. در نتیجه: ۱)مقدار سمافور y برابر با ۵ میشه ۲) تا اینجا هیچ پردازه ای پشته سمافور y منتظر نمی مونه.
در خط پنجم اون ۵ تا پردازه ای که وارد ناحیه B شدن، با اجرای این خط، ۵ تا از ۱۵ پردازه منتظر پشت سمافور x رو آزاد می کنن. در نتیجه:۱) ۵ تا پردازه جدید وارد ناحیه A میشه .۲) مقدار سمافور x برابر با ۱۰ میشه ۳) ۵ تا پردازه قدیمی وارد ناحیه C میشه.
تا اینجا وضعیت به این صورته که
۱) ۵ پردازه به ناحیه A وارد شده و مقدار سمافور y برابر با ۵ هست. در نتیجه خط سوم رو اجرا می کنن و وارد ناحیه B میشن و مقدار سمافور y صفر میشه و باز هم هیچ پردازه ای پشت سمافور y منتظر نمی مونه.
۲) ۵ پردازه به ناحیه ناحیه C وارد شده و مقدار سمافور x برابر با ۱۰ هست. در نتیجه خط آخر رو اجرا می کنن و مقدار سمافور y برابر با ۵ میشه.
(در این وضعیت پردازه های ناحیه A و پردازه های ناحیه C با هر ترتیبی ممکنه خط بعدشون رو اجرا کنن، مثلا ممکنه اول، دوتا از پردازه های ناحیه A اجرا شه و بعدش ۳ تا از پردازه های ناحیه C و ..... هر ترتیبی که در نظر بگیرید باز هم پشت سمافور y پردازه ای منتظر نمی مونه و در نهایت مقدار این سمافور برابر با ۵ میشه)
بر اساس توضیحات بالا و با بررسی تاریخچه اجرای این کد توسط ۲۰ پردازه، حداکثر تعداد پردازه های منتظر پشت سمافور x، برابر با ۱۵ و حدکثر تعداد پردازه های منتظر پشت سمافور y برابر با صفر هست.