با استفاده از std::thread و std::mutex یک برنامه بنویسید که یک شمارندهٔ مشترک را با N نخ همزمان هر کدام M بار افزایش دهد و در پایان مقدار نهایی شمارنده را چاپ کند.
0.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:23 0.0
برای حل، از هدرهای و (و همچنین و ) استفاده کنید؛ شمارندهٔ مشترک را در یک متغیر صحیح قرار دهید و قبل از هر افزایش از std::lock_guard برای محافظت از بخش بحرانی بهره ببرید و در پایان تمام نخها را join کنید تا مقدار نهایی برابر N*M شود. نکات: قفل را کوتاه نگه دارید تا تداخل کاهش یابد، برای مقایسهٔ کارایی در محیطهای Real-Time یا HPC میتوانید زمانبندی سادهای اضافه کنید و در صورت نیاز به کارایی بالاتر از std::atomic یا قفلهای سبکتر استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این پیادهسازی با std::mutex و std::lock_guard ایمن است، چون هر افزایش شمارنده را در یک بخش بحرانی محافظت میکند. برای کاهش تاخیر و رقابت بین نخها، طول بخش بحرانی را محدود نگه دارید و صرفاً مقدار لازم را در قفل نگه دارید. اگر هدف کارایی بیشتر است، میتوانید در موارد ساده از std::atomic<long long> با عملیات fetch_add استفاده کنید تا از قفل پرهیز شود. همچنین مطمئن شوید اندازهٔ دادهٔ شمارنده کافی است تا مقدار N*M را بدون overflow نگهداری کند.
گزارش