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