سؤال

لقد استخدمت إصدارا من قفل مزدوج فحصه في تطبيق My CF (قبل أن أعرف ما كان قفل مزدوج فحصه).

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

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

لا يوجد حل صحيح

نصائح أخرى

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

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

القفل الأول يتأكد فقط طلب واحد في كل مرة تهيئة المتغيرات الخاصة بك.

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

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

كملاحظة أخيرة، تم إهمال هذا السلوك الذي وصفته مع طريقة OnapplicationStart () ColdFusion 7's OnapplicationStart () لتقديم طلبك. إذا كنت تستخدم OnApplicationStart ()، فلا يجب أن تكون قفل على الإطلاق لروتين التطبيق الخاص بك. Application.cfc مغلق جيدا بالفعل.

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

جافا هي الخلافات، لذلك ليس الأمر كثيرا أن أقفالك لن تعمل لأنها ليست ضرورية. في الأساس، في CF 6+، هناك حاجة إلى أقفال لمنع ظروف السباق أو إنشاء / كائنات allering موجودة خارج عنصر تحكم Java (الملفات، على سبيل المثال).

لفتح علبة أخرى كاملة من الديدان ...

لماذا لا تستخدم مكتبة حقن التبعية، مثل البرودة، لتتبع الكائنات الخاصة بك ومنع التبعيات الدائرية.

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