سؤال

القراءة وثائق msdn عن القواميس يقول :"الجمهور ثابت (مشترك في Visual Basic) أعضاء من هذا النوع هي موضوع آمنة.أي على سبيل المثال لا يضمن أن تكون موضوع آمنة".

هذا يعني أنه مع القاموس مثل هذا :


static object syncObject = new object();
static Dictionary<string,MyObject> mydictionary= new Dictionary<string, MyObject>();

يفعل شيئا مثل رمز أدناه غير ضروري ؟


lock (syncObject)
{
   context = new TDataContext();
   mydictionary.Add("key", myObject);
}
هل كانت مفيدة؟

المحلول

وانها اشارة الى أساليب ثابتة على الطبقة نفسها. البيان هو في الواقع ثائق المتداول إضافة إلى معظم فئات. الطبقة قاموس <> لا يعرض في الواقع أي أساليب ثابتة.

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

نصائح أخرى

أنت إساءة تفسير "الجمهور ثابت الأعضاء من هذا النوع" ب "الجمهور ثابت الحالات من هذا النوع".

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

إذا، ومع ذلك، يمكنك استدعاء بعض أسلوب ثابت في قاموس (التي لا يوجد أي منها مفيدة) ثم كنت على ما يرام دون القفل.

وهذه هي القاعدة العامة لجميع أنواع الصافي في BCL.

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