این تمرینها بر پایهی درس کلاس 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 را حتماً باید کجا فراخوانی کرد؟ اگر بیرون از قفل صدا زده شوند چه خطایی رخ میدهد؟