الدرس 11: متغيرات الحالة — تنسيق threads
يمنع mutex حالات race conditions، لكنه لا يتيح لـ thread أن ينتظر حتى يصبح شرط ما صحيحاً. تتيح متغيرات الحالة (condition variables) لـ thread أن ينام بكفاءة حتى يشير thread آخر إلى أن شيئاً ما قد تغيّر.
متغير الحالة يشبه جرس المتجر: تنتظر عند الباب، وعندما يضع أحدهم عنصراً على الرف يقرع الجرس — عندها تدخل.
- متغير الحالة
- بدائية مزامنة (synchronisation primitive) تتيح لـ thread أن ينتظر شرطاً بشكل ذري مع تحرير الـ mutex، وأن يستيقظ عندما يشير thread آخر.
- المنتِج-المستهلِك
- نمط برمجي يقوم فيه thread واحد (المنتِج) بتوليد البيانات ووضعها في buffer، ويقوم thread آخر (المستهلِك) بأخذها ومعالجتها.
- الاستيقاظ الزائف
- حالة يعود فيها pthread_cond_wait رغم أنه لم يستدعِ أي thread الـ signal. تتطلب فحص الـ predicate ضمن حلقة.
- broadcast
- يوقظ pthread_cond_broadcast جميع الـ threads المنتظِرة على condition variable، على عكس signal الذي يوقظ واحداً فقط.
- المُسنَد (predicate)
- الشرط الذي يُفحَص قبل pthread_cond_wait وبعده للحماية من الاستيقاظات الزائفة (spurious wakeups) ومشكلات TOCTOU.