سؤال

كنت أتساءل عما إذا كان من المنطقي استخدام Mutex أو Semaphore عندما يكون هناك موضوع واحد فقط؟.

شكرا لمساعدتك.

هل كانت مفيدة؟

المحلول

أقوم بتصميم حماية الخيط في مكوناتي لأنها مكونات قابلة لإعادة الاستخدام وقابلة للتطوير تهدف إلى العمل في أي بيئة يمكنني توقعها بشكل واقعي. في كثير من الأحيان يتم استخدامها في البداية في بيئة موضوع واحد. في كثير من الأحيان يتوسع نطاق التنفيذ ليشمل المزيد من المواضيع. ثم لا يتعين علي مطاردة الموارد للحماية من سيناريوهات الوصول الجديدة.

نصائح أخرى

يمكن أن يكون Mutex منطقيًا ، حيث يمكن استخدام Mutex للمشاركة الواسعة للنظام ، بدلاً من المشاركة الداخلية على مستوى العملية. على سبيل المثال ، يمكنك استخدام Mutex ل منع بدء الطلب مرتين.

قد يكون هذا موجودًا قليلاً ولكن دعنا نقول إنك تكتب وظيفة متكررة وتريد تسجيل كل مستوى مع مورد منفصل. بهذه الطريقة يمكنك الحفاظ على مسؤولية تنظيف المورد في مكان واحد (تجمع الموارد).

يبدو وكأنه سؤال خدعة. من الناحية الفنية ، نعم. يمكن استخدام Mutex المسماة لتزامن عمليات متعددة تحتوي على مؤشر ترابط واحد في كل منها.

يمكنك استخدام system-wide semaphores (وحتى mutexes) للقيام inter-process communication.

يمكنك الإشارة من عملية واحدة إلى عملية واحدة أخرى من خلال acquire()/release()-ing على semaphore المسماة ، على سبيل المثال.

في حالة قيام البيئة بدعم النظام ، فإنه يضيف سلوكًا غير خطي. يمكن استخدام الإشارة إلى النوم في الخيط الرئيسي حتى يتم تشغيل محفزات المقاطعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top