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