همزمانی (Concurrency) به معنای اجرای به ظاهر همزمان چندین فرآیند یا نخ (Thread) است. در سیستمهای چند هستهای، همزمانی میتواند به صورت واقعی و با اجرای همزمان چندین نخ روی هستههای مختلف CPU انجام شود. اما در سیستمهای تک هستهای، همزمانی با استفاده از تکنیکهای زمانبندی و تعویض سریع بین نخها شبیهسازی میشود.
همزمانی، اگرچه مزایای زیادی مانند افزایش کارایی و پاسخگویی را به همراه دارد، اما چالشها و مشکلاتی را نیز ایجاد میکند که در ادامه به بررسی آنها میپردازیم.
اهداف یادگیری
- آشنایی با مفهوم همزمانی و مزایای آن
- یادگیری مشکلات ناشی از همزمانی مانند Race Condition و بنبست
- آشنایی با روشهای همگامسازی (Synchronization) برای حل مشکلات همزمانی
مشکلات ناشی از همزمانی
اجرای همزمان فرآیندها و نخها میتواند منجر به بروز مشکلاتی شود، از جمله:
-
Race Condition: وضعیتی که در آن نتیجهی اجرای برنامه به ترتیب اجرای اتفاقی فرآیندها یا نخها بستگی دارد.
مثال:
فرض کنید دو نخ به طور همزمان قصد افزایش مقدار یک متغیر مشترک را دارند. اگر هر دو نخ بدون در نظر گرفتن دیگری مقدار متغیر را بخوانند، آن را افزایش دهند و سپس در حافظه بنویسند، ممکن است نتیجه نهایی اشتباه باشد.
-
بنبست (Deadlock): وضعیتی که در آن دو یا چند فرآیند یا نخ به طور متقابل منتظر یکدیگر برای آزاد کردن منابع مورد نیازشان هستند و هیچکدام نمیتواند به کار خود ادامه دهد.
مثال:
فرض کنید دو نخ A و B وجود دارند. نخ A منتظر آزاد شدن منبع R1 توسط نخ B است، در حالی که نخ B منتظر آزاد شدن منبع R2 توسط نخ A است. در این حالت، هر دو نخ در انتظار یکدیگر باقی میمانند و بنبست رخ میدهد.
روشهای همگامسازی
برای جلوگیری از بروز مشکلات ناشی از همزمانی، از روشهای همگامسازی استفاده میشود. برخی از این روشها عبارتند از:
- Mutex: یک متغیر باینری است که برای پیادهسازی انحصار متقابل (Mutual Exclusion) استفاده میشود. به این معنی که در هر لحظه فقط یک نخ میتواند به یک منبع مشترک دسترسی داشته باشد.
- Semaphore: یک متغیر صحیح است که برای کنترل دسترسی به منابع مشترک استفاده میشود. Semaphore میتواند تعداد مشخصی از نخها را به طور همزمان به یک منبع مشترک دسترسی دهد.
- Monitor: یک ساختار دادهای است که شامل متغیرهای مشترک و توابعی برای دسترسی به آنها است. Monitor تضمین میکند که در هر لحظه فقط یک نخ میتواند در حال اجرای کد داخل آن باشد.
نکات کاربردی و مشاورهای
- درک مفهوم همزمانی و مشکلات ناشی از آن برای پاسخگویی به سوالات مفهومی در آزمونها بسیار مهم است.
- سعی کنید مثالهای مختلفی از Race Condition و بنبست را بررسی کنید تا درک بهتری از این مفاهیم پیدا کنید.
- با روشهای مختلف همگامسازی و نحوه پیادهسازی آنها آشنا شوید.
منابع
- Concurrency (computer science) - Wikipedia
- Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating system concepts (10th ed.). Wiley.