یک برنامهٔ C++ بنویسید که یک شمارندهٔ مشترک را با N نخ (thread) که هر کدام M بار آن را افزایش میدهند مدیریت کند و مقدار نهایی شمارنده را با استفاده از std::mutex ایمنسازی شده چاپ کند.
4.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:55 0.0
از هدرهای و (و در عمل ممکن است و ) استفاده کنید؛ داخل هر نخ حلقهای اجرا شود که شمارندهٔ مشترک را افزایش میدهد و دسترسی به شمارنده را با std::lock_guard محافظت کنید. پس از ساختن نخها آنها را join کنید و مقدار نهایی را چاپ کنید. نکات: برای کامپایل از استاندارد C++11 به بالا و گزینهٔ -pthread استفاده کنید، بخش بحرانی (قفلشده) را کوتاه نگه دارید تا کارایی در محیطهای HPC بهتر شود و در سیستمهای زمان-واقعی از قفلهای کوتاهتر یا روشهای غیرقفل (یا try_lock) برای اجتناب از بلاک طولانی استفاده شود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این رویکرد با std::mutex و std::lock_guard ایمنی همزمانی لازم را فراهم میکند و از وقوع race condition جلوگیری میکند. برای بهبود کارایی در محیطهای HPC میتوانید بخش بحرانی را کوتاه نگه دارید و در برخی موارد از std::atomic یا الگوریتمهای غیرقفل استفاده کنید. همچنین مطمئن شوید که با استاندارد C++11 یا بالاتر کامپایل میکنید و گزینه -pthread را در لینکینگ فعال کردهاید. در نهایت پس از ساختن N نخ و اجرای M بار، آنها را join کنید و مقدار نهایی شمارنده را چاپ کنید.
گزارش