الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن Semaphore

مغلق
بدأه net_code في 17 أغسطس 2005 · 4 رد · 5,610 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ماهى Semaphores

و كائنات تنظيم الوصول للموارد Resource Access Syncronaiztion

و كيفية صنعها ؟

و شكرا

لا تراجع و لا إستسلام

#2

المعنى الحرفي للSemaphore هو بوابة (مزلقان) القطار و التي تفتح لعبور السيارات من فوق القضبان و تغلق ليعبر القطار و هي نفس المبدأ الاساسي للShared Resource بين اثنين من المستهلكين Consumers فيكون القطار و السيارات هم الConsumers و قضبان القطار هي ال Shared Resource

اذن من التعريف السابق يتضح ان الSemaphore هو اداة لتنظيم استغلال الShared Resources بين (طرفين فقط)

مثلما يكون هناك 2 Threads في برنامج واحد يستخدمون Memory Location واحد كل فترة فيستخدم الSemaphore لعملية التنظيم

الSemaphore في الواقع هو Variable مكون من bit واحدة 0 او 1 فعندما يكون 0 يكون مفتوح اي الShared Variable غير محجوز و يمكن استغلاله و العكس صحيح

و يرتبط بعمليتين اساسيتين هما Lock و Release(Unlock) أو احيانا U و V على ما أتذكر

و ماذا اذا اردنا ان نجعل الSemaphore لأكثر من طرفين ؟؟؟؟؟؟؟

هنا سيتغير المفهوم و سنستخدم هنا مايسمى بالMonitor و هو Variable ايضا و لكن متعدد القيم و له قيمة كبرى Max Value و هي اكبر عدد من ال Active Sessions على الShared Resource و تتناقص هذه القيمة كلما حدث Lock و تتزايد مع الUnlock حتى تصبح صفرا و هنا ترفض جميع عمليات الLock الى ان تعود قيمة الMonitor الى قيمة اعلى من الصفر .

و ترتبط الفكرة كلها بمفهوم ال Mutual Exclusion او يطلق عليها اختصارا ال Mutex و هي ان احيانا يحتاج البرنامج او الThread الى عمل Exclusive Action في ال Shared Resource مما يتطلب وجود تنظيم لهذه العملية

ايضا يترتب على هذه المفاهيم ظهور مشكلة و هي ال Dead Lock و هي تحدث من ان تكون Process A تحجز Resource R1 و تحتاج الى Resource R2 و الذي تحجزه Process B و التي بدورها تحتاج الى Resource R1 المحجوز من A و الذي ينتج عنه مايسمى بالCircular Dependency أو ال Dead Lock او بالبلدي "قفلة" و لحل هذه المشاكل دراسات و دراسات و أبحاث طويلة و ووووو

السلام عليكم

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

شكرا جدا على التوضيح

و فى حالة الdead lock ينتج عنه توقف كلا من process a و process b

و لكن هل تم حل المشكله أم لا ؟

و شكرا

لا تراجع و لا إستسلام

#4

المشكلة محلولة منذ زمن

و لكن حلها يتوقف على نوع النظام نفسه فربما لا يمكن غلق Process A فهي Vital Process و ربما يكون كلا من ال 2 Processes المتصارعة Vital و هنا تصبح المشكلة اكثر تعقيدا و تحتاج خوارزميات اكثر تعقيدا لحلها.

و هنا تظهر الابحاث و المقالات التي تبحث حلولا سريعة و قوية للDead Locks

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5

شكرا أخوى على الرد

لا تراجع و لا إستسلام

هذا الموضوع مغلق.

مواضيع مشابهة