یک برنامه پایتون بنویسید که با استفاده از ماژول threading و Lock چند نخ بسازد که به‌صورت همزمان یک شمارندهٔ مشترک را افزایش دهند و در پایان مقدار صحیح شمارنده را چاپ کند.

2.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:27

0.0

برای حل، از threading.Thread برای ساختن چند نخ و از threading.Lock برای محافظت از بخش بحرانی (افزایش شمارنده) استفاده کنید: هر نخ چند بار شمارندهٔ مشترک را افزایش می‌دهد، قبل از تغییر مقدار lock.acquire یا بلوک with lock را صدا بزنید و بعد از تغییر آن را آزاد کنید. پس از ایجاد و شروع همه نخ‌ها، با join منتظر پایان‌شان بمانید و سپس مقدار نهایی شمارنده را در نخ اصلی چاپ کنید؛ این الگو از خطاهای همزمانی جلوگیری می‌کند و در زمینه‌هایی مانند سیستم‌های زمان-واقعی یا محاسبات با کارایی بالا کاربرد دارد—نکته‌ها: بخش بحرانی را کوتاه نگه دارید، از with lock استفاده کنید و برای مشاهدهٔ اثر قفل ابتدا نسخه‌ای بدون قفل اجرا کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:27
دسته بندی ها: Python Python for beginner
nima در 221 روز قبل ساعت 13:12

نکته: استفاده از قفل (Lock) برای محافظت از بخش بحرانی هنگام افزایش شمارنده ضروری است تا از رقابت داده‌ای جلوگیری شود. بهتر است به‌جای استفاده صریح از lock.acquire و lock.release، از عبارت with lock: استفاده کنید تا در تمامی مسیرها قفل به‌درستی آزاد شود. با وجود GIL در CPython، نخ‌ها به‌طور هم‌زمان به‌صورت واقعی موازی اجرا نمی‌شوند، اما این الگو برای جلوگیری از داده‌های مختل مفید است. برای دیدن اثر قفل، نسخه‌ای بدون قفل را اجرا کنید تا تفاوت را در نتیجه ببینید؛ همچنین تعداد نخ‌ها و دفعات افزایش را متناسب با کارایی تنظیم کنید.

گزارش

1 پاسخ

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

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