مزامنة بيانات ل متعدد العمليات

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

توفير "البنية الأساسية للغة العامة" استراتيجيات متعددة لمزامنة الوصول إلى مثيل وأعضاء ثابتة:

  • مناطق رمز المتزامنة. You can استخدم the Monitor فئة أو compiler دعم for this فئة إلى يزامن فقط the تعليمات برمجية حظر that needs it, improving الأداء.

  • يدوي المزامنة. You can استخدم the المزامنة الكائنات provided بواسطة the .NET Framework فئة مكتبة. See نظرة عامة حول الأوليات المزامنة, which يتضمن a مناقشة of the Monitor فئة.

  • Synchronized contexts. You can استخدم the SynchronizationAttribute إلى تمكين simple, تلقائي المزامنة for ContextBoundObject الكائنات.

  • مجموعة فئات في the System.Collections.Concurrent مساحة الاسم. These فئات provide built-في synchronized إضافة و إزالة العمليات. لمزيد من المعلومات، راجع Thread-Safe Collections.

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

Category

حقول العمومية

ثابت حقول

ثابت وظائف

حقول مثيل

وظائف مثيل

كتل تعليمات برمجية الخاصة

لا المزامنة

لا

لا

لا

لا

لا

لا

سياق المتزامنة

لا

لا

لا

نعم

نعم

لا

مناطق تعليمات برمجية متزامن

لا

لا

فقط إذا تم وضع علامة

لا

فقط إذا تم وضع علامة

فقط إذا تم وضع علامة

المزامنة اليدوية

يدوي

يدوي

يدوي

يدوي

يدوي

يدوي

لا المزامنة

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

المزامنة اليدوية

توفر مكتبة الفئات NET Framework عدد من الفئات لمؤشرات ترابط مزامنة. انظر نظرة عامة حول الأوليات المزامنة

مناطق تعليمات برمجية متزامن

يمكنك استخدام Monitorفئة أو كلمة أساسية مترجم إلى مزامنة كتل تعليمات برمجية وأساليب مثيل وأساليب ثابتة. هناك هو يوجد أي دعم للحقول الثابتة المتزامنة.

كل من Visual أساسى و C# دعم العلامات كتل تعليمات برمجية مع معينة اللغة الكلمة الأساسية، lockالعبارة في C# أو SyncLockعبارة في Visual أساسى. عند التعليمة البرمجية هو تنفيذها بواسطة مؤشر ترابط، محاولة هو التي تم إجراؤها على اكتساب التأمين. إذا كان قفل مسبقاً تم اكتسب قبل مؤشر ترابط آخر، bقفلs مؤشر ترابط حتى قفل يصبح متوفراً. عند إنهاء مؤشر ترابط المتزامنة حظر من تعليمات برمجية، التأمين هو إصدارها، بغض النظر عن كيفية إنهاء مؤشر ترابط للحظر.

ملاحظةملاحظة

lockو SyncLockالمطبقة استخدام عبارات Monitor.Enterو Monitor.Exit، وسائل غير ذلك لذلك من Monitorيمكن استخدامها بالاقتران مع لهم مع في منطقة المتزامنة.

يمكنك أيضا تزيين أسلوباً له MethodImplAttribute و MethodImplOptions.Synchronized ، التي لها نفس التأثير عند استخدام Moniإلىr أو إحدى الكلمات الأساسية للمترجم إلى تأمين كامل النص الأساسي للأسلوب.

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

ملاحظة هامةهام

بتأمين النوع — هو typeof(MyType)في C#, GetType(MyType)في Visual أساسى، أو MyType::typeidفي C + +-في ترتيب إلى حماية staticوظائف ( Sharedالوظائف في Visual أساسى).استخدام ثابتة خاصة كائن بدلاً من ذلك.وبشكل مماثل، هل لا استخدم thisفي C# ( Meفي Visual أساسى) إلى قفل المثيل وظائف.استخدام كائن خاص بدلاً من ذلك.يمكن مؤمّن فئة أو مثيل بواسطة تعليمات برمجية غير الخاص بك، من المحتمل أن يسبب مشاكل الأداء أو deadlocks.

دعم برنامج التحويل البرمجي

يدعم كلاهما Visual أساسى و C# كلمة أساسية لغة التي يستخدمها Monitor.Enterو Monitor.Exitقفل الكائن. يعتمد Visual أساسى SyncLock عبارة; C# يعتمد العبارة التأمين.

وفي كلتا الحالتين، إذا إستثناء يتم طرح في كتلة تعليمات برمجية، يتم تحرير التأمين الحصول على تأمين أو Syncقفل تلقائياً. The C# و Visual أساسى compilers emit a try/finally حظر مع جهاز العرض.Enter الزر at the beginning of the try, و جهاز العرض.خروج في the finally حظر. If an ‏‏ استثناء هو تم طرح inside the قفل أو SyncLock حظر, the finally handler runs إلى allow you إلى do أي مسح-لأعلى work.

سياق المتزامنة

You can استخدم the SynchronizationAttribute تشغيل أي ContextBoundObject إلى يزامن الجميع مثيل وظائف و حقول. الجميع الكائنات في the same سياق مجال يجعله مشتركًا the same قفل. Multiple عمليات جزئية are allowed إلى الوصول the وظائف و حقول, but فقط a مفرد مؤشر ترابط هو allowed at أي واحد الوقت.

راجع أيضًا:

المرجع

بيان SyncLock

تأمين بيان (C# مرجع)

SynchronizationAttribute

المبادئ

عمليات جزئية و مؤشر الترابط التشعبي

نظرة عامة حول الأوليات المزامنة