برنامه‌ای در C++ بنویسید که N عدد thread ایجاد کند تا هر کدام شمارندهٔ مشترکی را مجموعاً یک‌میلیون بار افزایش دهند و با استفاده از std::mutex از race condition جلوگیری کند و مقدار نهایی شمارنده را چاپ کند.

0.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:08

0.0

از هدرهای و و و استفاده کنید؛ شمارندهٔ مشترک را به‌صورت یک متغیر global یا اشتراکی تعریف کرده و هنگام افزایش آن از std::lock_guard برای قفل و بازکردن خودکار mutex استفاده کنید، سپس همهٔ threadها را join کنید تا مقدار نهایی صحیح بدست آید. نکات: محدودهٔ بخش بحرانی را کوچک نگه دارید تا تداخل کمتر شود، برای کارهای با کارایی بالا (HPC) می‌توانید از شمارنده‌های محلی هر thread و سپس جمع‌زدن نهایی استفاده کنید و برای سیستم‌های Real‑Time از قفل‌های بلاک‌کننده با احتیاط یا روش‌های lock‑free بررسی نمایید؛ برنامه را با گزینهٔ -pthread کامپایل کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:08
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 221 روز قبل ساعت 14:28

استفاده از std::lock_guard با std::mutex برای حفاظت از شمارنده و نگه‌داشتن بخش بحرانی کوتاه، رویکرد امنی است. برای کاهش تداخل و افزایش کارایی، هر thread می‌تواند شمارندهٔ محلی خودش را نگه دارد و در پایان با مقدارهای محلی، به شمارندهٔ مشترک اضافه شود. در حالت‌های HPC یا Real‑Time می‌توانید از روش‌های جمع‌زدن محلی و سپس مخلوط‌کردن نتایج استفاده کنید یا از قفل‌های با انتظار کمتر استفاده کنید. فراموش نکنید برنامه را با گزینه -pthread کامپایل کنید.

گزارش

1 پاسخ

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

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