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

تمرین ۵ فصل ۵ استالینگز

ارسال:
  

rad.bahar پرسیده:

تمرین ۵ فصل ۵ استالینگز

[/align]تو را به خدا حواب بدید جند تا موضوع گداشتم کسی جواب نداده
چرا کد زیر انحصار متقابل را نقض می کند
[bool blocked[2];
int turn;
void p (int id)
{
while(true)
{
blocked[id] = true;
while(turn <> id)
{
while(blocked[i-id])
turn = id;
}
critical section
blocked[id] =false;
remainder
}
}
مشاهده‌ی وب‌سایت کاربر

۰
ارسال:
  

shervinrs پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

چقدر سخت، فکر کنم نیم ساعت طول کشید که بفهمم. البته اگر درست فهمیده باشم.

سناریویی که به نقض انحصار متقابل می انجامه می تونه اینطوری باشه:
فرض کنین که مقدار turn = 0 باشه و هر دو فرایند در قسمت غیر بحرانی (remainder) خودشون باشن. یعنی فرایند ۱ وارد قسمت بحرانی شده باشه و پس از خروج در قسمت غیر بحرانی خودش CPU به فرایند ۰ داده بشه و فرایند ۰ وارد قسمت بحرانی خودش شده باشه و در قسمت غیر بحرانی فرایند ۰ CPU به فرایند ۱ برگشته باشه.
با فرض طولانی بودن قسمت غیر بحرانی فرایند ۱ این فرایند می تونه به ابتدای حلقه While بیرونی برگرده و blocked[1] = true بکنه و وارد حلقه داخلی شده و قبل از turn = id زمانبند به فرایند ۰ سوئیچ کنه. توجه کنین که هنوز مقدار turn تغییر داده نشده و هنوز همون ۰ هست.
حالا فرایند ۰ به ابتدای حلقه بیرونی برگرده و در زمان چک کردن شرط حلقه داخلی (یعنی turn != id) اون رو بصورت ۰ != ۰ ببینه (که false هست) و بدون وارد شدن به حلقه داخلی وارد ناحیه بحرانی خودش (فرایند ۰) بشه و در ناحیه بحرانی زمانبند به فرایند ۱ سوئیچ بکنه. که فرایند یک هم که در خط انتهایی حلقه داخلی بوده از اون خارج میشه و وارد ناحیه بحرانی میشه. و اینجاست که انحصار متقابل نقض می گردد.

ارسال:
  

rad.bahar پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

(۳۰ دى ۱۳۹۰ ۰۱:۱۶ ق.ظ)shervinrs نوشته شده توسط:  چقدر سخت، فکر کنم نیم ساعت طول کشید که بفهمم. البته اگر درست فهمیده باشم.

سناریویی که به نقض انحصار متقابل می انجامه می تونه اینطوری باشه:
فرض کنین که مقدار turn = 0 باشه و هر دو فرایند در قسمت غیر بحرانی (remainder) خودشون باشن. یعنی فرایند ۱ وارد قسمت بحرانی شده باشه و پس از خروج در قسمت غیر بحرانی خودش CPU به فرایند ۰ داده بشه و فرایند ۰ وارد قسمت بحرانی خودش شده باشه و در قسمت غیر بحرانی فرایند ۰ CPU به فرایند ۱ برگشته باشه.
با فرض طولانی بودن قسمت غیر بحرانی فرایند ۱ این فرایند می تونه به ابتدای حلقه While بیرونی برگرده و blocked[1] = true بکنه و وارد حلقه داخلی شده و قبل از turn = id زمانبند به فرایند ۰ سوئیچ کنه. توجه کنین که هنوز مقدار turn تغییر داده نشده و هنوز همون ۰ هست.
حالا فرایند ۰ به ابتدای حلقه بیرونی برگرده و در زمان چک کردن شرط حلقه داخلی (یعنی turn != id) اون رو بصورت ۰ != ۰ ببینه (که false هست) و بدون وارد شدن به حلقه داخلی وارد ناحیه بحرانی خودش (فرایند ۰) بشه و در ناحیه بحرانی زمانبند به فرایند ۱ سوئیچ بکنه. که فرایند یک هم که در خط انتهایی حلقه داخلی بوده از اون خارج میشه و وارد ناحیه بحرانی میشه. و اینجاست که انحصار متقابل نقض می گردد.

با تشکر از جوابتان مطالبی را که گفتید متوجه شدم ولی با قسمتی که ذز بالا زیر ان خط کشیده‌ام مشکل دارم زمانی که وقت cpu دوباره به فرایند ۱ برمی گردد و turn = id می شود فرایند ۱ در جلقه while(blocked(1-id)) گیر می افتد زیرا فرایند ۰ قبل از ورود به ناحیه بحرانی blocked[0] = true کرده است و با این وضغ تا زمانی که فرایند ۰ از ناحیه بحرانی خارح نشده و blocked[0] را false نکند فرایند ۱ در جلقه while(blocked(1-id)) همجنان می ماند
نظر شما چیست
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر

۰
ارسال:
  

shervinrs پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

turn = id در حلقه [tex]while(blocked[1-id])[/tex] نیست.
زمانی که دوباره CPU به فرایند ۱ بر می گرده turn = 1 میشه و فرایند به ابتدای [tex]while (id <> turn)[/tex] بر می گرده و چون id = turn هست دیگه شرط while درست نیست و از while خارج میشه. یعنی اصلا دیگه سراغ [tex]while(blocked[1-id])[/tex] نمیره.

ارسال:
  

rad.bahar پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

(۰۱ بهمن ۱۳۹۰ ۰۵:۴۹ ب.ظ)shervinrs نوشته شده توسط:  turn = id در حلقه [tex]while(blocked[1-id])[/tex] نیست.
زمانی که دوباره CPU به فرایند ۱ بر می گرده turn = 1 میشه و فرایند به ابتدای [tex]while (id <> turn)[/tex] بر می گرده و چون id = turn هست دیگه شرط while درست نیست و از while خارج میشه. یعنی اصلا دیگه سراغ [tex]while(blocked[1-id])[/tex] نمیره.

با تشکر از جوابتان ببخشید من بد نوشتم در تمرین مذکور turn = id در حلقهwhile(blocked[1-id)] قرار دارد
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر

۰
ارسال:
  

shervinrs پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

قرار نداره. این عکس از ویرایش ششم کتاب هست.

ارسال:
  

rad.bahar پاسخ داده:

RE: تمرین ۵ فصل ۵ استالینگ

(۰۱ بهمن ۱۳۹۰ ۰۷:۳۳ ب.ظ)shervinrs نوشته شده توسط:  قرار نداره. این عکس از ویرایش ششم کتاب هست.

متشکرم کتاب من ویرایش ۴ بود برای همین فرق داشت با این حساب اگر turn = id در حلقه while(blocked[1-id)] قرار گیرد انحصار متقابل رعایت می شود
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
Information فصل یک تا پنج پایان نامه αɾια ۵ ۵,۴۹۴ ۲۶ بهمن ۱۴۰۰ ۰۴:۱۶ ب.ظ
آخرین ارسال: HoseinMos
  فصل Np , Np hard nazanin2020 ۱ ۲,۰۵۰ ۲۱ آذر ۱۴۰۰ ۱۰:۴۵ ب.ظ
آخرین ارسال: nazanin2020
  حل تمرین کتاب سیستم های فازی و کنترل فازی neo.st ۲۳ ۴۱,۰۸۲ ۳۰ فروردین ۱۴۰۰ ۰۹:۳۵ ق.ظ
آخرین ارسال: mahdiyehbakhshi
  حل تمرین شدن و مصاحبه دکتری siiib70 ۱ ۳,۵۴۶ ۱۷ بهمن ۱۳۹۹ ۱۱:۳۲ ب.ظ
آخرین ارسال: hmaryam567
  کمک برای حل تمرین پایگاه داده zhila1994 ۰ ۲,۱۴۳ ۲۲ آذر ۱۳۹۹ ۰۱:۲۵ ب.ظ
آخرین ارسال: zhila1994
  [دانلود] کتاب clrs همراه با حل تمرین و پیوست فارسی mehrdad66 ۳۸ ۸۶,۶۴۶ ۲۴ خرداد ۱۳۹۹ ۰۴:۲۲ ب.ظ
آخرین ارسال: Nargeshassani
  ریاضی گسسته روزن ویرایش ۷ همراه با کتاب حل تمرین ها livestrong ۱۲ ۲۰,۶۲۴ ۱۷ اردیبهشت ۱۳۹۹ ۰۴:۳۷ ب.ظ
آخرین ارسال: raziyeh.karbasi
  مشکل در حل تست ۲۲ فصل اول کتاب گسسته یوسفی pure.yaser ۷ ۹,۲۸۹ ۰۹ اردیبهشت ۱۳۹۹ ۰۶:۵۴ ب.ظ
آخرین ارسال: mohsentafresh
  فصل HEAP از کتاب ساختمان داده طورانی (پارسه) tourani ۳۷ ۳۹,۷۷۰ ۱۲ اسفند ۱۳۹۸ ۰۵:۱۹ ب.ظ
آخرین ارسال: hossein4070
Sad درخواست حل تمرین nimaz4 ۱ ۲,۵۸۱ ۲۵ آذر ۱۳۹۸ ۰۳:۵۷ ب.ظ
آخرین ارسال: soltanMohammad

پرش به انجمن:

Can I see some ID?

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

Feeling left out?


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

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

Feeling left out?


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