یک برنامه C Plus Plus بنویسید که با استفاده از std::thread و std::mutex از هدر چند نخ را راه‌اندازی کند تا یک شمارندهٔ مشترک را به طور ایمن در یک شبیه‌سازی بار محاسباتی ساده برای محیط‌های بلادرنگ/HPC افزایش دهد و مقدار نهایی شمارنده را چاپ کند.

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

0.0

برای حل این مسئله از برای ایجاد چند نخ و از std::mutex (و ترجیحاً std::lock_guard) برای محافظت از دسترسی به شمارندهٔ مشترک استفاده کنید؛ هر نخ چند بار شمارنده را افزایش دهد و پس از ایجاد نخ‌ها با join از تکمیل آن‌ها اطمینان حاصل کنید. نکات: با کاهش محدودهٔ قفل (critical section) عملکرد را بهتر کنید، برای شمارنده‌های ساده می‌توان از std::atomic استفاده کرد اما این تمرین عمداً mutex را می‌خواهد، و برای کامپایل از گزینهٔ -pthread استفاده کنید؛ همچنین از sleep_for برای شبیه‌سازی کار محاسباتی کوتاه استفاده نموده تا رفتار هم‌زمانی مشهودتر شود.

توسط پژوهشگر در 202 روز قبل ساعت 02:19
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 202 روز قبل ساعت 10:10

برای ایمن‌سازی دسترسی به شمارندهٔ مشترک از std::lock_guard<std::mutex> استفاده کنید تا از خطاهای رایج قفل‌گذاری دستی جلوگیری شود. برای بهبود کارایی، طول بخش بحرانی را کاهش دهید و تنها کدی که به mutex نیاز دارد داخل قفل اجرا شود؛ از sleep_for برای شبیه‌سازی کار محاسباتی استفاده کنید تا رفتار هم‌زمانی واضح‌تر شود. اگر هدف فقط تمرین هم‌زمانی است، std::atomic گزینه‌ای ساده‌تر است اما در این تمرین باید از mutex استفاده کنید. فراموش نکنید پروژه را با -pthread کامپایل کنید و با join منتظر پایان اجرای همه نخ‌ها باشید تا مقدار نهایی شمارنده چاپ شود.

گزارش

1 پاسخ

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

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