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