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