إشارة و SemaphoreSlim

System.Threading.Semaphoreفئة يمثل المسماة (مستوى النظام) أو إشارة المحلي. هو مجمع رفيع حول كائن إشارة Win32. يتم حساب الإشارات Win32 الإشارات، والذي يمكن استخدامه للتحكم في الوصول إلى تجمع موارد.

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

إدارة مصدر محدود

عمليات جزئية بإدخال إشارة بواسطة استدعاء WaitOneالأسلوب، يتم توريث من WaitHandleفئة. عند إرجاع الاستدعاء، العدد على إشارة هو decremented. عند قيام مؤشر ترابط طلب الإدخال و العدد هو صفر، كتل مؤشر الترابط. كما حرر عمليات جزئية إشارة بواسطة استدعاء Semaphore.Releaseالأسلوب، عمليات جزئية المحظورة مسموح إلى Enter الزر الزر. هناك هو لا ترتيب مضمونة، على سبيل المثال أول-في، أول-خارج (FIFO) أو آخر-في أول-خارج (LIFO) لمؤشرات الترابط المحظورة لإدخال إشارة.

أن مؤشر ترابط Enter الزر إشارة عدة مرة/مرات باستدعاء WaitOneأسلوب تكرار. إلى إصدار إشارة، أما أن مؤشر ترابط باستدعاء Release()أسلوب زيادة التحميل نفس العدد من المرات، أو اتصل Release(Int32)أسلوب زيادة التحميل وحدد عدد الإدخالات إلى يتم إصدارها.

الإشارات ومؤشر ترابط الهوية

Semaphoreفئة لا بفرض هوية مؤشر ترابط تشغيل المكالمات إلى WaitOneو Releaseالأساليب. على سبيل المثال، يتضمن سيناريو شائع استخدام للإشارات مؤشر ترابط المنتج و بمؤشر ترابط عميل مع مؤشر ترابط واحد دائماً تزايد تعداد إشارة و الآخر دائماً decrementing به.

هو المسؤولية للمبرمج للتأكد من أن مؤشر ترابط لا تحرير إشارة مرة/مرات كثيرة جداً. على سبيل المثال، افترض أن إشارة عدد أقصى من الثاني، ومؤشر الترابط أ ومؤشر ترابط B كلا Enter الزر إشارة. في حالة خطأ برمجي في مؤشر ترابط B يؤدي ذلك إلى $ $ $ $ يتصل Releaseمرتين، تنجح كلا s يتصل. العدد الدخول إشارة هو بالكامل، وعند مؤشر ترابط A يؤدي استدعاء الدالة Release، SemaphoreFullExceptionهو طرح.

الإشارات المسماة

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

يمكنك إنشاء Semaphoreكائن الذي يمثل إشارة النظام مسمى باستخدام واحد المنشئات التي تحدد اسم.

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

نظراً للإشارات المسمى النظام واسع، فإنه هو يمكن العديد من Semaphoreالكائنات التي تمثل نفس إشارة المسماة.في كل مرة تقوم باستدعاء على الدالة الإنشائية أو Semaphore.OpenExistingجديد، أسلوب Semaphoreالكائن هو تاريخ الإنشاء.تحديد نفس اسم إنشاء العديد من الكائنات التي تمثل إشارة اسم d نفس بشكل متكرر.

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

استخدام الوصول عنصر تحكم الالأمان لحماية Semaphoreالكائن الذي يمثل إشارة مسماة، يفضل باستخدام الدالة الإنشائية الذي يحدد System.Security.AccessControl.SemaphoreSecurityالكائن. يمكنك أيضا يطبق الأمان التحكم بالوصول باستخدام Semaphore.SetAccessControlالأسلوب، ولكن th هو تترك إطارا لمشكلة عدم الحصانة بين الوقت إشارة هو التي تم إنشاؤها والوقت هو محمية. حماية الإشارات مع الأمان التحكم بالوصول وتساعد على منع الهجمات الضارة، ولكن لم يحل المشكلة من عدد التضاربات اسم غير مقصود.

راجع أيضًا:

المرجع

Semaphore

SemaphoreSlim

موارد أخرى

ترابط الكائنات و الميزات