یک برنامه پایتون بنویسید که با استفاده از threading.Condition یک الگوریتم تولیدکننده-مصرفکننده ساده را پیادهسازی کند؛ تولیدکننده عناصر را در یک بافر با اندازه محدود میگذارد و مصرفکننده آنها را میخواند و از wait/notify برای هماهنگی استفاده میکند.
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:45 0.0
برای حل مسئله از ماژول threading در پایتون استفاده کنید و یک threading.Condition ایجاد نمایید؛ عملیات خواندن و نوشتن روی بافر (یک لیست با حداکثر اندازه مشخص) را داخل بلوک with condition: انجام دهید، وقتی بافر پر است تولیدکننده باید condition.wait() کند و وقتی خالی است مصرفکننده باید condition.wait() کند، و پس از اضافه یا حذف یک عنصر با condition.notify() یا condition.notify_all() دیگر نخها را بیدار کنید. این الگو برای هماهنگی در سیستمهای بلادرنگ و محاسبات با کارایی بالا (HPC) کاربرد دارد — از busy-waiting پرهیز کنید و از time.sleep تنها برای شبیهسازی زمان تولید/مصرف استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
استفاده از threading.Condition برای همگامسازی بافر محدود، از busy-wait جلوگیری میکند و دسترسی به بافر را به شکل ایمن همزمان میکند. تولیدکننده باید با شرط پر بودن بافر منتظر بماند و مصرفکننده هنگام خالی بودن بافر نیز با شرط منتظر شود؛ هر دو عملیات باید داخل بلوک with condition انجام شوند تا قفل به درستی نگهداشته شود. پس از افزودن یا حذف عنصر، باید از notify یا notify_all استفاده کنید تا نخهای منتظر بیدار شوند. از time.sleep فقط برای شبیهسازی تاخیرها استفاده کنید و از حلقههای شرطی (while) برای جلوگیری از بیدار شدن اشتباه و بهبود پایداری همگامسازی بهره ببرید.
گزارش