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

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

مقاطع

يصف هذا الموضوع الأنواع التالية لحظر الرسائل غير المتزامنة بالتفصيل:

  • critical_section

  • reader_writer_lock

  • scoped_lock و scoped_lock_read

  • حدث

critical_section

تمثل الفئة critical_section كائن استثناء متبادلة تعاونية التي تؤدي إلى مهام غير ذلك بدلاً من preempting لهم. مقاطع هامة مفيدة عندما تتطلب مؤشرات ترابط متعددة القراءة خاص وحق الوصول إلى بيانات المشتركة.

critical_sectionفئة غير-reentrant. الأسلوب critical_section::قفل يطرح استثناء من نوع improper_قفل إذا أنه هو استدعاؤها بواسطة مؤشر ترابط الذي يملك التأمين بالفعل.

وظائف و الميزات

يوضح الجدول التالي الطرق الهامة التي يتم تعريفها بواسطة critical_sectionفئة.

Method

الوصف

التأمين

تكتسب مقطع حرج. bقفلs سياق استدعاء حتى أنها تكتسب قفل.

try_lock

يحاول إلى اكتساب مقطع التفاصيل الهامة، ولكن عدم كتلة لا.

إلغاء التأمين

قم بتحرير مقطع حرج.

[go to top]

reader_writer_lock

الفئة reader_writer_lock توفير العمليات القراءه/الكتابه على مسار تنفيذ اﻷمن إلى بيانات المشتركة. استخدام التأمين القارئ/الكاتب عندما تتطلب مؤشرات الترابط المتعددة المتزامنة وصول للقراءة فقط إلى مورد مشترك ولكنها نادراً ما الكتابة إلى هذا المورد المشترك. وهذا فئة يعطي مؤشر ترابط واحد فقط حق الوصول إلى كائن في أي وقت.

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

في critical_sectionفئة، reader_writer_lockفئة يمثل كائن استثناء متبادلة تعاونية التي تؤدي إلى مهام غير ذلك بدلاً من preempting لهم.

عند قيام مؤشر ترابط التي يجب أن يكتب إلى مورد مشترك تكتسب قارئ/كاتب قفل، عمليات جزئية الأخرى كما يجب الوصول إلى المورد هي bقفلed إلى أن تصدر الكاتب قفل. reader_writer_lockالفئة هو مثال تفضيل لكتابة تأمين، التي هو بتأمين unblocks انتظار الكتاب قبل ذلك unblocks انتظار القراء.

في critical_sectionفئة، reader_writer_lockالفئة هو غير-reentrant. reader_writer_قفل::قفل و reader_writer_قفل::قفل_read وظائف قم بطرح استثناء من نوع improper_lockإذا كانت تسمى قبل مؤشر ترابط يملك بالفعل قفل.

ملاحظة

لأن reader_writer_lockالفئة هو غير-reentrant، لا يمكن ترقية قراءة-فقط قفل قفل قارئ/كاتب أو downgrade قفل قارئ/كاتب للقراءة فقط القفل. قم بتنفيذ أي من هاتين العمليتين ينتج عن سلوك غير محدد.

وظائف و الميزات

يوضح الجدول التالي الطرق الهامة التي يتم تعريفها بواسطة reader_writer_lockفئة.

Method

الوصف

التأمين

تكتسب حق الوصول القراءه/الكتابه إلى قفل.

try_lock

محاولة اكتساب حق الوصول القراءه/الكتابه إلى قفل، ولكن هل لا b قفل.

lock_read

تكتسب حق الوصول للقراءة فقط إلى التأمين.

try_lock_read

محاولة اكتساب القراءة-فقط الوصول إلى قفل، ولكن هل لا b قفل.

إلغاء التأمين

قم بتحرير التأمين.

[go to top]

scoped_lock و scoped_lock_read

critical_sectionو reader_writer_lockتوفر الفئات فئات مساعد المتداخلة التي تبسيط طريقة العمل مع الكائنات الاستثناء المتبادل. تعرف هذه clكـses مساعد كـ خاصة التأمين .

critical_sectionيحتوي على الفئة فئة critical_section::scoped_lock . المنشئ تكتسب حق الوصول إلى المتوفر critical_sectionكائن؛ تصدر destructor الوصول إلى التي كائن. reader_writer_lockيحتوي على الفئة reader_writer_lock::scoped_lock فئة، الذي يشبه critical_section::scoped_lock، إلا أنه من إدارة الوصول للكتابة إلى المتوفر reader_writer_lockكائن. reader_writer_lockكما يحتوي على الفئة فئة reader_writer_lock::scoped_lock_read . هذه الفئة بإدارة وصول قراءة إلى المتوفر reader_writer_lockكائن.

تأمين نطاق توفر فوائد عديدة عند العمل مع critical_sectionو reader_writer_lockالكائنات يدوياً. بشكل عام، تقوم بتخصيص قفل نطاق تشغيل مكدس. قفل نطاق تحرير الوصول إلى الكائن الاستثناء المتبادلة الخاصة به تلقائياً عند فإنه هو إتلاف; إلغاء لذلك، لا يدوياً قفل الكائن المصدر. Th هو هو مفيدة عندما يحتوي على دالة متعددة returnعبارات. تأمين نطاق يمكنه أيضا مساعدتك كتابة تعليمات برمجية للاستثناء-آمن. عند throwكشف يسبب المكدس ل unwind destructor لأي قفل نطاق النشطة هو يسمى، ولذلك الكائن الاستثناء المتبادل هو دائماً بشكل صحيح بإصدار.

ملاحظة

عندما تقوم باستخدام critical_section::scoped_lock، reader_writer_lock::scoped_lock، و reader_writer_lock::scoped_lock_readفئات، لا يدوياً تحرير الوصول إلى استثناء المتبادلة الأساسية كائن. وهذا يمكن وضع وقت التشغيل في الولاية غير صالحة.

حدث

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

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

وظائف و الميزات

يعرض الجدول التالي العديد من الطرق الهامة التي يتم تعريفها بواسطة eventفئة.

Method

الوصف

الانتظار

ينتظر حدث إلى تصبح إليه بصوت.

set

قم بتعيين حدث إلى الولاية signaled.

إعادة تعيين

قم بتعيين حدث إلى الحالة غير إليه صوت.

wait_for_multiple

ينتظر أحداث متعددة إلى تصبح إليه بصوت.

المثال

للحصول على مثال يوضح كيفية استخدام eventفئة، راجع مقارنة بنيات بيانات المزامنة لواجهة برمجة تطبيقات Windows.

[go to top]

الأقسام ذات الصلة

  • Comparing Synchronization Data Structures to the Windows API
    قم بمقارنة سلوك بنيات بيانات المزامنة لتلك التي يوفرها Windows API.

  • التزامن وقت التشغيل
    توضح هذه المقالة "وقت تشغيل تزامن" التي تبسط البرمجة المتوازية، ويحتوي على الارتباطات إلى إلى صور مرتبطة.