متعدد العمليات متى يتم استخدام فئات التزامن

الفئات متعددة مؤشرات الترابط المتوفرة مع MFC تنقسم إلى فئتين: كائنات التزامن (CSyncObject،CSemaphore،CMutex،CCriticalSection و CEvent ) و كائنات الوصول المتزامن (CMultiLock،CSingleLock).

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

لتحديد فئة المزامنة التي يجب عليك استخدامها ، اسأل مجموعة الأسئلة التالية:

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

    إذا كان نعم، استخدم CEvent.

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

    إذا كان نعم، استخدم CSemaphore.

  3. ‏‫‏‫هل يمكن لأكثر من تطبيق استخدام هذا المورد (على سبيل المثال، مورد في DLL) ؟

    إذا كان نعم، استخدم CMutex.

    إذا كان لا ، استخدم CCriticalSection.

CSyncObject لا يستخدم مباشرة أبداً. وهو الفئة الأساسية لأربعة فئات تزامن أخرى .

المثال الأول: استخدام ثلاث فئات مزامنة

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

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

المثال الثاني: استخدام فئات مزامنة الوصول

اختيار أي فئة مزامنة وصول سيتم استخدامها أبسط . إذا كان التطبيق الخاص بك مهتماً بالوصول إلى مورد مُتحكَمٍ فيه واحدٍ فقط، استخدم CSingleLock. إذا كان يحتاج إلى الوصول لأي عدد من الموارد يتم التحكم فيها استخدم CMultiLock. في المثال 1، كان سيتم استخدام CSingleLock ، لأن هناك حاجة لمورد واحد فقط في كل حالة عند أي وقت معين.

للحصول على معلومات حول كيفية استخدام فئات المزامنة, راجع Multithreading: كيف يتم استخدام فئات التزامن للحصول على المزيد من المعلومات حول المزامنة، راجع التزامن في Windows SDK. لمزيد من المعلومات حول دعم تعدد العمليات في MFC راجع تعدد العمليات مع C++ و MFC .

راجع أيضًا:

المبادئ

تعدد العمليات بـ ++C و MFC