شكرا جزيلا على الفيديو في سؤال عندي بالنسبة للمسألة الأولى لو تسمحلي الطريقة الثانية بتاعت الsemaphore ليه استعملنا ٢ semaphores و ليس ١ فقط بحيث foo تعمل acquire بعدين print بعدين release كذلك bar تعمل acquire ثم print ثم release شكرا
احنا بنستخدم Semaphore عشان نفتح و نقفل ، نتحكم في انهي thread يقدر يشتغل دلوقتي. ال Semaphore بيقفل ازاي؟ ان يكون ال count بتاعه ب Zero. طيب نفترض ان thread Foo اشتغل و عايز يقول ل Thread Bar عليك الدور، لو استخدمنا Semaphore واحد، و عمل عليه release و خلى ال count 1 و بعدها و عمل عليه acquire و مستني دوره، اللي هيحصل اننا مش ضامنين ان Thread Bar أصلا بدأ , بالتالي في احتمال ان thread Foo يكمل بناء على ال acquire لان وقتها هيكون ال count 1 ، و ده مش مطلوب. عشان كدة استخدام Semaphore لكل thread بيضمن التحكم الكامل ان كل Thread مش هيبدأ يكون الدور عليه، اتمنى تكون وضحت.