مجموعات مؤشر الترابط الآمن

.NET Framework 4 يقدم مساحة الاسم System.Collections.Concurrent , التي تتضمن عدة مجموعات من فئات آمنة كدوال خيطية و قابلة للتوسع. مؤشرات ترابط متعددة بأمان وكفاءة إضافة أو إزالة عناصر من هذه المجموعات، دون الحاجة إلى المزامنة إضافى في تعليمات برمجية للمستخدم. عند كتابة تعليمات برمجية جديدة، استخدام الفئات مجموعة متزامنة في أي وقت ستكتب المجموعة إلى مؤشرات ترابط متعددة بشكل متزامن. إذا كنت للقراءة فقط من مجموعة مشتركة، فيمكنك استخدم الفئات في System.Collections.Genericمساحة الاسم. من المستحسن القيام بجملة 1.0 استخدام الفئات غير ما لم تكن مطلوبة إلى لاستهداف.NET Framework 1.1 أو وقت التشغيل السابقة.

مزامنة الدوال الخيطية في مجموعات .NET Framework 1.0 و 2.0

المجموعات المقدمة في .NET Framework 1.0 توجد في مساحة الاسم System.Collections. هذه المجموعات التي تتضمن ArrayList و Hashtableالشائعة الاستخدام , توفر بعض آمان الدوال الخيطية خلال الخاصية Synchronized , التي تُرجِع المضمّن الآمن للدوال الخيطية حول مجموعة. يعمل برنامج التضمين من خلال إغلاق المجموعة بكاملها لكل عملية إضافة أو إزالة. لذلك ، كل دالة خيطية تحاول الوصول إلى المجموعة يجب أن تنتظر دورها للحصول على القفل الواحد. هذا غير قابل للتوسع و قد يؤدي إلى تدهور ملحوظ في الأداء للمجموعات الكبيرة. أيضاً، التصميم غير محمي بالكامل من حالات التعارض. ولذلك، ل المزيد من المعلومات، راجع من المزامنة في "مجموعات عامة" تشغيل موقع MSDN تشغيل ويب.

مجموعات الفئات المقدمة في .NET Framework 2.0 توجد في مساحة الاسم System.Collections.Generic. هذه تتضمن List<T> ، Dictionary<TKey, TValue> ، و هكذا. توفر هذه الفئات تحسين لأمان النوع و للأداء مقارنة بفئات .NET Framework 1.0. عامة ، مجموعة فئات .NET Framework 2.0 لا توفر أي مزامنة للدوال الخيطية ; التعليمات البرمجية للمستخدم يجب أن توفر المزامنة الكاملة عندما تُضاف أو تٌزال العناصر على دوال خيطية متعددة بشكل متزامن.

نوصي بمجموعات الفئات المتزامنة في .NET Framework 4 لأنها لا توفر أمان النوع لمجموعة فئات .NET Framework 2.0 فحسب و لكن أيضاً أكثر فعالية و أمان تام للدوال الخيطية مما توفره المجموعات.NET Framework 1.0.

القفل ذو الحبيبات الناعمة و آليات القفل الحر

بعض أنواع مجموعة المتزامنة استخدم آليات المزامنة خفيفة مثل SpinLock، SpinWait، SemaphoreSlim، و CountdownEvent، التي تعتبر جديدة في .NET Framework 4. أنواع المزامنة هذه عادةً تستخدم الدوران المشغول لفترات قصيرة قبل أن تضع الدالة الخيطية إلى حالة انتظار حقيقية. عندما تكون أوقات الانتظار من المتوقع أن تكون قصير جداً، يدور هو الممكن الآن أقل تكلفة من انتظار، والتي تتضمن انتقال kernel مكلفة. لمجموعة فئات يختفي الاستخدام هذه، فعالية هذا يعني أنه يمكن إضافة مؤشرات ترابط متعددة و إزالة عناصر بسرعة عالية للغاية. للحصول على مزيد من المعلومات حول أو الدوران. حظر، راجع SpinLockو SpinWait.

ConcurrentQueue<T>و ConcurrentStack<T>فئات لا استخدم التأمين في الجميع. بدلاً من ذلك، تعتمد تشغيل Interlockedالعمليات إلى تحقيق مؤشر ترابط-أمان.

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

لأن المجموعات المتزامنة فئات تدعم ICollection، وهي توفر تطبيقات IsSynchronizedو SyncRootالخصائص، حتى لو تم هذه الخصائص متعلقة.IsSynchronized always returns false and SyncRoot is always null (Nothing in Visual Basic).

يسرد الجدول التالي أنواع المجموعات في System.Collections.Concurrentمساحة الاسم.

Type

الوصف

BlockingCollection<T>

يوفر وظائف الإحاطة و الحظر لأي نوع يطبق IProducerConsumerCollection<T>. لمزيد من المعلومات، راجع نظرة عامة BlockingCollection.

ConcurrentDictionary<TKey, TValue>

التنفيذ الآمن للدوال الخيطية لقاموس لأزواج قيم المفتاح.

ConcurrentQueue<T>

التنفيذ الآمن للدوال الخيطية لقائمة الإنتظار FIFO (الداخل أولاً, يخرج أولاً).

ConcurrentStack<T>

التنفيذ الآمن للدوال الخيطية لمكدس LIFO (الداخل أخراً,يخرج أولاً).

ConcurrentBag<T>

التنفيذ الآمن للدوال الخيطية لمجموعة غير مرتبة من العناصر.

IProducerConsumerCollection<T>

الواجهة التي يجب ينفذها النوع ليستخدم في BlockingCollection.

مواضيع ذات صلة

Title

الوصف

نظرة عامة BlockingCollection

تصف هذه المقالة الوظيفة المُوفَرة بواسطة النوع BlockingCollection<T>.

كيفية القيام بما يلي: صواب إزالة عناصر من ConcurrentDictionary

تصف هذه المقالة كيفية إضافة و إزالة عناصر من [T:System.Collections.Concurrent.ConcurrentDictionary`2.]

كيفية القيام بما يلي: إضافة و أخذ العناصر بشكل فردي من BlockingCollection

تصف هذه المقالة كيفية إضافة و استرداد العناصر من مجموعة حظر بدون استخدام عداد للقراءة فقط.

كيفية القيام بما يلي: إضافة إحاطة و حظر وظيفة في فئة مجموعة

تصف كيفية استخدام أي مجموعة فئات كآلية التخزين التحتية لمجموعة IProducerConsumerCollection<T>.

كيفية القيام بما يلي: استخدم ForEach لإزالة عناصر في BlockingCollection

توضح هذه المقالة كيفية إلى استخدام foreach، ( For Eachفي Visual أساسى) إلى قم بإزالة كل العناصر في مجموعة المنع.

كيفية القيام بما يلي: استخدم صفائف من حظر مجموعات داخل خط أنابيب

تصف هذه المقالة كيفية استخدام عدة مجموعات حظر في نفس الوقت لتنفيذ خط أنابيب.

المرجع

System.Collections.Concurrent