تجنب حالة الجمود في عملية متعددة مؤشرات الترابط

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

  •  20-08-2019
  •  | 
  •  

سؤال

ما هي أفضل الممارسات/التعابير التي يجب على الشخص اتباعها لتجنب الجمود؟

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

نصائح أخرى

هناك أربعة شروط والتي يجب أن تحدث حتى يحدث الجمود:

  1. شرط الاستبعاد المتبادل:مورد لا يمكن استخدامه من قبل أكثر من عملية واحدة في نفس الوقت

  2. حالة الانتظار والانتظار:قد تتطلب العمليات التي تمتلك موارد بالفعل موارد جديدة

  3. لا يوجد شرط الشفعة:لا يمكن إزالة أي مورد بالقوة من العملية التي تحتفظ به، ولا يمكن تحرير الموارد إلا من خلال الإجراء الصريح للعملية

  4. حالة الانتظار الدائرية:تشكل عمليتان أو أكثر سلسلة دائرية حيث تنتظر كل عملية موردًا تحتفظ به العملية التالية في السلسلة

تجنب واحدة على الأقل من هذه، ويفضل أكثر، ويجب ألا يكون لديك الكثير من المشاكل.

وهناك ما يسمى بانكر خوارزمية ، لتجنب الجمود. أيضا يمكنك أن تنظر في استخدام ووتش الكلب من أجل الخروج شكل الجمود. هنا قليلة أيضا النقاط المثيرة للاهتمام.

وتقنية متعارف عليها لتجنب المأزق هو أن يكون هناك تسلسل هرمي القفل. تأكد من أن كافة المواضيع اكتساب تأمين أو غيرها من الموارد في نفس الترتيب. تجنب هذا السيناريو الجمود حيث الموضوع: 1 عقد تأمين ألف واحتياجات قفل B بينما موضوع 2 يحمل قفل B ويحتاج قفل A. مع تسلسل هرمي القفل، فإن كلا المواضيع لديها للحصول على التأمين في نفس الترتيب (مثلا، A قبل B) .

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

من بين الطرق المختلفة لإدخال الأقسام المهمة، تعتبر الإشارات وكائنات المزامنة هي الأكثر شيوعًا.

  • الإشارة عبارة عن آلية انتظار وكائن المزامنة (mutex) عبارة عن آلية قفل، حسنًا، المفهوم مربك للغاية، ولكن باختصار، لا يمكن لخيط تنشيط كائن المزامنة (mutex) سوى إلغاء تنشيطه.بوضع هذا بعين الاعتبار...

  • لا تسمح لأي عملية بتأمين عدد جزئي من الموارد، إذا كانت العملية تحتاج إلى 5 موارد، فانتظر حتى تصبح جميع الموارد متاحة.

  • إذا كنت تستخدم الإشارة هنا، فيمكنك إلغاء حظر/إلغاء انتظار المورد الذي يشغله مؤشر ترابط آخر.وأعني بهذا أن الشفعة سبب آخر.

هذه 2 بالنسبة لي هي الشروط الأساسية، ويمكن أن تكون الاحتياطات المتبقية 2 من الاحتياطات الأربعة الشائعة مرتبطة بهذه.

إذا كنت لا توافق على ملاحظة إضافة التعليقات.لقد تأخرت بالفعل، وسأضيف لاحقًا شرحًا أوضح وأكثر وضوحًا.

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