با استفاده از std::thread و std::mutex یک شمارندهٔ مشترک پیادهسازی کنید که N نخ هر کدام M بار آن را افزایش دهند و در پایان مقدار نهایی چاپ شود.
7.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:16 0.0
برای حل، از هدرهای و (و همچنین و ) استفاده کنید؛ شمارندهٔ مشترک را بهعنوان یک متغیر سراسری یا در محیط بستهٔ تابع قرار دهید و هر بار قبل از افزایش با std::lock_guard قفل را گرفته و پس از افزایش قفل آزاد میشود، سپس همهٔ نخها را join کنید تا برنامه قبل از چاپ مقدار نهایی منتظر اتمام آنها بماند. نکات: از lock_guard برای مدیریت خودکار قفل استفاده کنید، بخش بحرانی را کوتاه نگه دارید تا کارایی در سناریوهای Real-Time/HPC بهبود یابد و در مواردی که کارایی مهم است میتوانید به جای mutex از std::atomic استفاده کنید؛ برنامه را با -std=c++11 یا بالاتر کامپایل کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای پیادهسازی از std::thread و std::mutex استفاده کنید و شمارندهٔ مشترک را در محیطی مشترک تعریف کنید. هر بار که نخ قصد افزایش شمارنده دارد با std::lock_guard<std::mutex> قفل میگیرد و پس از افزایش قفل آزاد میشود تا بخش بحرانی کوتاه بماند. اگر کارایی اهمیت دارد، میتوانید از std::atomic<int> به جای mutex استفاده کنید یا از شمارش محلی (thread-local) و جمعآوری نهایی استفاده کنید. در پایان همهٔ نخها را با join منتظر میمانید و برنامه را با -std=c++11 یا بالاتر کامپایل کنید.
گزارش