سيمافور مقابل موتكس
Semaphore هي بنية بيانات تُستخدم للتأكد من أن العمليات المتعددة لا تصل إلى مورد مشترك أو قسم مهم في نفس الوقت ، في بيئات البرمجة المتوازية. تستخدم Semaphores لتجنب الأقفال الميتة وظروف السباق. يستخدم Mutex (كائن الاستبعاد المتبادل) أيضًا لتجنب الوصول إلى مورد مشترك في نفس الوقت من خلال عدة عمليات متزامنة.
ما هي الإشارة؟
Semaphore هي بنية بيانات تُستخدم لتوفير الاستبعاد المتبادل للأقسام الحرجة. تدعم Semaphores بشكل أساسي عمليتين تسمى الانتظار (المعروفة تاريخياً باسم P) والإشارة (المعروفة تاريخياً باسم V).تحجب عملية الانتظار العملية حتى يتم فتح السيمافور وتسمح عملية الإشارة بالدخول إلى عملية أخرى (مؤشر ترابط). ترتبط كل إشارة بقائمة انتظار لعمليات الانتظار. عندما يتم استدعاء عملية الانتظار بواسطة مؤشر ترابط ، إذا كانت الإشارة مفتوحة ، يمكن أن يستمر مؤشر الترابط. إذا تم إغلاق الإشارة عندما يتم استدعاء عملية الانتظار بواسطة مؤشر ترابط ، يتم حظر مؤشر الترابط ويتعين عليه الانتظار في قائمة الانتظار. تفتح عملية الإشارة إشارة ، وإذا كان هناك مؤشر ترابط ينتظر بالفعل في قائمة الانتظار ، فيُسمح لهذه العملية بالمتابعة وإذا لم تكن هناك خيوط منتظرة في قائمة الانتظار ، يتم تذكر الإشارة للخيوط التالية. هناك نوعان من الإشارات تسمى إشارات كائن المزامنة (mutex semaphores) وعدد الإشارات. تسمح إشارات Mutex بالوصول الفردي إلى مورد وتسمح إشارات العدّ للخيوط المتعددة بالوصول إلى مورد (يحتوي على عدة وحدات متوفرة).
ما هو كائن المزامنة؟
عند بدء تشغيل تطبيق الكمبيوتر ، فإنه سيتم إنشاء كائن المزامنة (mutex) وإرفاقه بالمورد.عندما يتم استخدام المورد بواسطة مؤشر ترابط ، يتم تأمينه ولا يمكن استخدام مؤشرات الترابط الأخرى. إذا أراد موضوع آخر استخدام نفس المورد ، فسيتعين عليه تقديم طلب. ثم سيتم وضع هذا الخيط في قائمة انتظار حتى ينتهي الخيط الأول مع المورد. عند الانتهاء من الخيط الأول مع المورد ، ستتم إزالة القفل ويمكن لمؤشر الترابط الذي ينتظر في قائمة الانتظار الوصول إلى المورد. إذا كان هناك العديد من سلاسل الرسائل المنتظرة في قائمة الانتظار ، فسيتم منحها حق الوصول بالتناوب. من الناحية العملية ، عندما يقوم كائن المزامنة (mutex) بالتناوب على الوصول إلى مورد بين عدة مؤشرات ترابط ، فسيكون مرئيًا لأن خيوط متعددة تستهلك موردًا في نفس الوقت. لكن داخليًا ، هناك مؤشر ترابط واحد فقط يصل إلى المورد في وقت معين.
ما الفرق بين سيمافور وموتكس؟
على الرغم من استخدام كل من الإشارات وكائنات كائن المزامنة (mutex) لتحقيق الاستبعاد المتبادل في بيئات البرمجة المتوازية ، إلا أن هناك بعض الاختلافات.يسمح كائن كائن المزامنة (mutex) فقط لمؤشر ترابط واحد باستهلاك مورد أو قسم هام ، بينما تسمح الإشارات بعدد محدود من عمليات الوصول المتزامنة إلى مورد (تحت الحد الأقصى المسموح به للعدد). مع كائنات كائن المزامنة (mutex) ، يتعين على مؤشرات الترابط الأخرى التي تريد الوصول إلى المورد الانتظار في قائمة انتظار ، حتى ينتهي مؤشر الترابط الحالي باستخدام المورد.