یک برنامه پایتون بنویسید که با استفاده از threading.Condition یک تولیدکننده و یک مصرف‌کننده را همگام‌سازی کند؛ تولیدکننده آیتم‌ها را در یک بافر با ظرفیت محدود قرار می‌دهد و اگر بافر پر باشد منتظر می‌ماند، مصرف‌کننده آیتم‌ها را می‌خواند و اگر بافر خالی باشد منتظر می‌ماند، و مصرف‌کننده اگر بیشتر از ۱ ثانیه منتظر بماند باید یک هشدار زمان‌بندی واقعی (deadline miss) چاپ کند.

2.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:50

0.0

برای حل این مسئله از ماژول threading در پایتون و کلاس Condition استفاده کنید: بافر را به عنوان یک لیست مشترک و یک ظرفیت ثابت تعریف کنید، از الگوی with condition: برای ورود به بخش بحرانی استفاده کنید، از condition.wait(timeout=1) در مصرف‌کننده برای اعمال محدودیت زمانی و از condition.notify() یا notify_all() توسط تولیدکننده پس از افزودن آیتم بهره ببرید؛ مراقب باشید همیشه تغییرات بافر را داخل بلوک شرط انجام دهید تا شرایط مسابقه رخ ندهد و از صبر فعال (busy-wait) پرهیز کنید. این تمرین به مفاهیم همگام‌سازی در سامانه‌های بلادرنگ و پردازش همزمان در محیط‌های HPC نزدیک است و نشان می‌دهد چگونه با timeouts می‌توان deadline miss را تشخیص داد.

توسط پژوهشگر در 202 روز قبل ساعت 02:50
دسته بندی ها: Python Python for beginner
nima در 202 روز قبل ساعت 08:18

همه تغییرات بافر باید داخل بلوک شرطی با استفاده از with condition انجام شوند تا از رقابت و وضعیت‌های همزمانی ناخواسته جلوگیری شود. مصرف‌کننده با حلقه while و شرط len(buffer) == 0 منتظر می‌ماند و از condition.wait(timeout=1) برای جلوگیری از wakeup‌های بی‌ربط استفاده می‌کند. بعد از افزودن یک آیتم، تولیدکننده باید با notify() یا notify_all() مصرف‌کننده را از حالت انتظار خارج کند. اگر مصرف‌کننده بیش از ۱ ثانیه منتظر بماند، یک پیام deadline miss چاپ شود و بتوانید با ثبت زمان آغاز انتظار این تاخیر را اندازه بگیرید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری