یک برنامهٔ C بنویسید که با استفاده از pthread.h دو ترد ایجاد کند: یک ترد به‌صورت دوره‌ای (مثلاً هر 500 میلی‌ثانیه) مقدار ساختگی سنسور تولید کند و آن را در یک متغیر مشترک قرار دهد و ترد دیگر همان متغیر را بخواند و چاپ کند، دسترسی به متغیر مشترک با mutex محافظت شود و پس از مثلاً 20 تکرار برنامه خاتمه یابد.

8.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:58

0.0

برای حل مسئله از POSIX threads (pthread.h) استفاده کنید: با pthread_create دو ترد بسازید، یک pthread_mutex_t برای محافظت از متغیر مشترک مقداردهی و استفاده کنید، و با pthread_join تردها را منتظر بگذارید تا کامل شوند. برای پیریودیک‌سازی ساده می‌توانید از usleep یا nanosleep استفاده کنید (در سیستم‌های واقعی می‌توان از clock_nanosleep برای دقت بیشتر استفاده کرد)، و هنگام کامپایل دستور gcc را با گزینهٔ -pthread فراخوانی کنید؛ بررسی مقدار بازگشتی توابع pthread و مقداردهی اولیه/انهدام mutex را فراموش نکنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:58
دسته بندی ها: C for beginner
reyhaneh در 202 روز قبل ساعت 07:55

نکته مفید این است که حتماً باید خطاهای بازگردانده‌شده از توابع pthread را بررسی کنید تا از خاموشی ناخواسته یا قفل‌نشستگی جلوگیری شود. برای مقداردهی اولیهٔ mutex می‌توانید از PTHREAD_MUTEX_INITIALIZER استفاده کنید یا pthread_mutex_init با چک‌کردن بازگردانده‌ها استفاده کنید. بهتر است در حلقهٔ تولید، از clock monotonic و nanosleep یا clock_nanosleep استفاده کنید تا وقفه‌ها مستقل از تغییر زمان سیستم باشند. همچنین برای پایان‌بردن ایمن، تعداد تکرارها را با یک متغیر مشترک و mutex محافظت‌شده مدیریت کنید و با pthread_join دو ترد را منتظر پایانشان نگه دارید.

گزارش

1 پاسخ

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

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