كيف يمكنني مزامنة اثنين في عملية الحصول على نفس الموارد ؟

StackOverflow https://stackoverflow.com/questions/1656568

  •  11-09-2019
  •  | 
  •  

سؤال

لدي اثنين من العمليات التي الوصول إلى نفس الذاكرة الفعلية(GPIO البيانات addr).لذلك كيف يمكنني مزامنة بين هذه التطبيقات ؟ أنا أفهم أن لدينا نوعا من آلية قفل مثل مزامنة و إشارة ، لذلك الأسلوب هو الأسرع ؟

شكرا على مساعدتكم ،

-nm

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

المحلول

Mutexes و الإشارات تعتبر عموما التزامن الحلول في نفس مساحة العنوان ... بمعنى أن أجزاء مختلفة من نفس البرنامج قفل الوصول إلى الموارد باستخدام واحدة من هذه البدع.

عندما كنت تتعامل مع عمليات منفصلة ، معيار طريقة للقيام بذلك على لينكس هو خلق شيء في /var/lock, مثل /var/lock/myapp.lock, ، ضع PID تليها في ذلك السطر.ثم عمليات أخرى سوف تحقق وجودها ، وإذا كنت ماكرة التحقق PID للتأكد من انها لا تزال على قيد الحياة أيضا.

إذا كنت بحاجة إلى الوصول في الوقت الحقيقي إلى منطقة تخطي الملفات والعمليات سوف يكون التواصل عبر IPC (LET_ME_KNOW_WHEN_DONE, OKAY_IM_DONE, يمكنك الحصول على فكرة) ، أو أفضل-كتابة عملية هدفها الوحيد هو القراءة والكتابة إلى GPIO الذاكرة و البرامج الأخرى الخاصة بك من التواصل مع ذلك عبر IPC (ربما أفضل نهج).

نصائح أخرى

Mutex تعني الاستبعاد المتبادل - إشارة هو مجرد متغير يستخدم لتحديد ما إذا كان المورد قيد الاستخدام. في Windows، يوجد كائن MUTEX الذي يمكن إنشاؤه لحماية مورد مشترك.

المشكلة هي اللغة التي تستخدمها؟ ما نظام التشغيل (أنا أفترض لينكس). توفر معظم اللغات الدعم للاستبعاد متعدد الخيوط والتبادل، ويجب عليك استخدام البنيات المدمجة.

على سبيل المثال، باستخدام C على Linux، قد ترغب في ذلك

تشمل الإشارة

والبحث عن مكالمات SEM_INIT، SEM_WAIT الخ

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