تمرینات کلاس Condition در ماژول threading

Please login to bookmark Close

این تمرین‌ها بر پایه‌ی درس کلاس Condition هستند.

تمرین ۱ (مفهومی)

Condition برای چه نوع هماهنگی‌ای به کار می‌رود و چرا نسبت به «مدام پرسیدن که آیا شرط برقرار شد؟» (busy-waiting) بهتر است؟

تمرین ۲ (مفهومی)

در مثال «گارسون سارق» چرا باید برای بررسی شرط به‌جای if از while استفاده شود؟ این موضوع چه ارتباطی با Spurious Wakeup و از دست رفتن Notify دارد؟

تمرین ۳ (مفهومی)

تفاوت متد notify() و notify_all() چیست و هرکدام در چه شرایطی مناسب‌ترند؟

تمرین ۴ (مفهومی)

در مثال انبار و سامانه‌ی ثبت، چرا برنامه از دو قفل جداگانه (یک Lock اصلی به نام main_lock و یک Condition به نام item_condition) استفاده می‌کند؟ اگر فقط یک قفل مشترک استفاده می‌شد چه خطری پیش می‌آمد؟

تمرین ۵ (مفهومی)

چرا قرار دادن یک time.sleep چندثانیه‌ای درون بلوک with condition: می‌تواند باعث افت شدید کارایی برنامه شود؟

تمرین ۶ (کد)

یک الگوی تولیدکننده/مصرف‌کننده بنویسید: یک ترد «آشپز» پس از ۱ ثانیه یک متغیر is_ready را True و notify می‌کند؛ یک ترد «گارسون» با while و wait منتظر می‌ماند و بعد پیام می‌دهد.

تمرین ۷ (کد)

یک «صف کارها» بنویسید: یک توزیع‌کننده چند کار را در یک لیست مشترک می‌گذارد و با notify اعلام می‌کند؛ یک کارگر با Condition منتظر می‌ماند و هر کاری که رسید پردازش می‌کند. یک راه توقف تمیز هم در نظر بگیرید.

تمرین ۸ (مفهومی)

متدهای wait، notify و notify_all را حتماً باید کجا فراخوانی کرد؟ اگر بیرون از قفل صدا زده شوند چه خطایی رخ می‌دهد؟

Please login to bookmark Close
نظرات

دیدگاهتان را بنویسید

فهرست مطالب

سرفصل دوره

تمرین

این قسمت تمرین ندارد!

پاسخ تمرین ها

هنوز برای تمرین‌های این قسمت پاسخی ثبت نشده است!

اشتراک گذاری

چرا بهتره از فیلترشکن استفاده کنید؟

من همه ویدئو ها و پادکست های کُدباز رو توی یوتیوب و ساندکلود و پلتفرم هایی آپلود می‌کنم که اغلب فیلتر هستند.

اغلب آموزش‌ها ویدئو و پادکست دارند. پس اگر می‌خواهید از محتوای سایت بیشترین استفاده رو ببرید نیاز به فیلتر شکن دارید.

توجه داشته باشید که برای خرید از فروشگاه بهتره فیلتر شکن رو خاموش کنید.

تنظیمات

انتخاب زبان
تغییر تم