یک برنامهٔ C++ بنویسید که با ایجاد چند نخ (thread) موازی یک شمارندهٔ مشترک از نوع std::atomic را چند بار افزایش دهد و مقدار نهایی صحیح شمارش را چاپ کند تا نشان دهد استفاده از std::atomic از race condition جلوگیری می‌کند.

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

0.0

برای حل این مسئله از هدر برای تعریف std::atomic و از هدر برای ایجاد و مدیریت نخ‌ها استفاده کنید؛ هر نخ تعداد مشخصی تکرار (++ یا fetch_add) روی شمارنده انجام دهد و قبل از چاپ نتیجه همه نخ‌ها را با join() منتظر بمانید. نکات: از عملیات اتمیک برای جلوگیری از data race استفاده کنید، از حافظهٔ پیش‌فرض ordering بهره ببرید مگر نیاز به بهینه‌سازی خاص باشد، و با گزینهٔ -std=c++11 یا بالاتر برنامه را کامپایل کنید؛ این الگو برای سیستم‌های بلادرنگ و محاسبات با عملکرد بالا اهمیت دارد چون باعث قطعیت و کارایی در دسترسی مشترک به متغیرها می‌شود.

توسط پژوهشگر در 221 روز قبل ساعت 01:29
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 221 روز قبل ساعت 13:04

استفاده از std::atomic با ++ یا fetch_add، race conditions را از بین می‌برد؛ توصیه می‌شود از حالت پیش‌فرض memory_order_seq_cst استفاده کنید مگر بهینه‌سازی خاصی مدنظر باشد. هر نخ باید کار خود را با یک مقدار مشخص انجام دهد و در پایان با join() منتظر بمانید تا همهٔ نخ‌ها به پایان برسند و نتیجهٔ نهایی چاپ شود. برای اجرای صحیح در سیستم‌های POSIX، برنامه را با گزینهٔ -pthread کامپایل کنید. این الگو به‌ویژه در سیستم‌های بلادرنگ و محاسبات با کارایی بالا مفید است زیرا دسترسیٔ مشترک به شمارنده را مطمئن و کارآمد می‌کند.

گزارش

1 پاسخ

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

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