سؤال

أنا أتساءل, في, من الاستراتيجيات التي يمكن تطبيقها إلى الحد من انخفاض مستوى تأمين.ومع ذلك الصيد هنا هو أن هذا ليس قانون جديد (مع عشرات الآلاف من خطوط C++ code) على ملقم التطبيق, لذلك لا استطيع كتابة كل شيء.

أخشى قد لا يكون هناك حل لهذه المشكلة حتى الآن (بعد فوات الأوان).ومع ذلك أود أن أسمع عن أنماط الآخرين قد استخدمت.

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

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

المحلول

لماذا تحتاج إلى إزالة على مستوى منخفض قفل ؟ هل لديك الجمود القضايا ؟ هل لديك مشاكل في الأداء?أو رفع القضايا ؟ هي أقفال عموما ادعت أو uncontended?

ما البيئة التي تستخدمه ؟ الإجابات في C++ سوف تكون مختلفة عن تلك التي في جاوة ، على سبيل المثال.E. g.uncontended تزامن كتل في جافا 6 هي في الواقع رخيصة نسبيا من حيث الأداء ، لذلك ببساطة ترقية JRE قد تحصل في الماضي أيا كانت المشكلة التي تحاول حلها.قد تكون هناك مماثلة يعزز الأداء المتاحة في C++ عن طريق التحول إلى مختلف مترجم أو قفل المكتبة.

في عام, هناك العديد من الاستراتيجيات التي تسمح لك للحد من عدد من mutexes يمكنك الحصول على.

أول شيء فقط من أي وقت مضى الوصول إليها من خيط واحد لا تحتاج إلى مزامنة.

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

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

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

نصائح أخرى

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

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

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

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