یک برنامهٔ C++ بنویسید که یک شمارندهٔ مشترک را با N نخ (thread) که هر کدام M بار آن را افزایش می‌دهند مدیریت کند و مقدار نهایی شمارنده را با استفاده از std::mutex ایمن‌سازی شده چاپ کند.

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

0.0

از هدرهای و (و در عمل ممکن است و ) استفاده کنید؛ داخل هر نخ حلقه‌ای اجرا شود که شمارندهٔ مشترک را افزایش می‌دهد و دسترسی به شمارنده را با std::lock_guard محافظت کنید. پس از ساختن نخ‌ها آن‌ها را join کنید و مقدار نهایی را چاپ کنید. نکات: برای کامپایل از استاندارد C++11 به بالا و گزینهٔ -pthread استفاده کنید، بخش بحرانی (قفل‌شده) را کوتاه نگه دارید تا کارایی در محیط‌های HPC بهتر شود و در سیستم‌های زمان-واقعی از قفل‌های کوتاه‌تر یا روش‌های غیرقفل (یا try_lock) برای اجتناب از بلاک طولانی استفاده شود.

توسط پژوهشگر در 202 روز قبل ساعت 02:55
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 202 روز قبل ساعت 08:04

این رویکرد با std::mutex و std::lock_guard ایمنی هم‌زمانی لازم را فراهم می‌کند و از وقوع race condition جلوگیری می‌کند. برای بهبود کارایی در محیط‌های HPC می‌توانید بخش بحرانی را کوتاه نگه دارید و در برخی موارد از std::atomic یا الگوریتم‌های غیرقفل استفاده کنید. همچنین مطمئن شوید که با استاندارد C++11 یا بالاتر کامپایل می‌کنید و گزینه -pthread را در لینکینگ فعال کرده‌اید. در نهایت پس از ساختن N نخ و اجرای M بار، آن‌ها را join کنید و مقدار نهایی شمارنده را چاپ کنید.

گزارش

1 پاسخ

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

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