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