سؤال

أستمر في السماع عن البرمجة المتزامنة في كل مكان.هل يمكنكم يا رفاق إلقاء بعض الضوء على ماهيته وكيف تسهل معايير C++ الجديدة فعل الشيء نفسه؟

هل كانت مفيدة؟

المحلول

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

الموضوع قصير لـ "خيط التنفيذ".في برنامج C++ ذو الخيط الواحد، يبدأ التنفيذ عند main()، ثم يستمر بطريقة تسلسلية.في برنامج متعدد الخيوط، يبدأ الخيط الأول من الرئيسي، ولكن يمكن بدء سلاسل رسائل إضافية بواسطة التطبيق الذي يبدأ بوظيفة محددة من قبل المستخدم.ثم يتم تشغيلها بشكل متزامن، أو بالتوازي مع الخيط الأصلي.

في C++ 0x يتم بدء تشغيل سلاسل الرسائل باستخدام std::thread فصل:

void my_function()
{
    // do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread

يدعم معيار C++0x الجديد أيضًا:

  • القيم الذرية والعمليات مع std::atomic<> قالب الفصل,
  • كائنات المزامنة لحماية البيانات (std::mutex, std::recursive_mutex, ، إلخ.)
  • فئات القفل لسهولة إدارة عمر القفل (std::lock_guard<>, std::unique_lock<>)
  • std::lock و std::try_lock وظائف لإدارة الحصول على أقفال متعددة في نفس الوقت دون المخاطرة بالوصول إلى طريق مسدود
  • متغيرات الحالة لتسهيل انتظار الحدث (std::condition_variable, std::condition_variable_any)
  • العقود الآجلة والوعود والمهام المجمعة لتبسيط تمرير البيانات بين سلاسل الرسائل وانتظار القيمة لتكون جاهزة.يعالج هذا السؤال الكلاسيكي "كيف يمكنني إرجاع قيمة من سلسلة رسائل".
  • التهيئة الآمنة لمؤشر الترابط للكائنات الثابتة المحلية
  • ال thread_local الكلمة الأساسية للإعلان عن بيانات مؤشر الترابط المحلية

لقد قدمت نظرة عامة أكثر تفصيلاً عن مكتبة سلاسل رسائل C++ 0x الجديدة في مقالتي على devx.com: تعدد مؤشرات الترابط أبسط في C++ 0x

أنا أكتب عن تعدد مؤشرات الترابط والتزامن في C++ مدونتي.وأنا أيضا أكتب كتابا حول هذا الموضوع: التزامن C++ في العمل.

نصائح أخرى

عندما تقول "كيف تسهل معايير c++ الجديدة" البرمجة المتزامنة، أفترض أنك تتحدث عن معيار C++09 الذي سيتم إصداره قريبًا (؟).

المعيار الجديد بصيغته الحالية في شكل مسودة يدعم العناصر التالية التي تساعد في البرمجة المتزامنة:

  • الأنواع الذرية والعناوين
  • فئة موضوع
  • تخزين thread_local (الذي تمت إضافته للتو إلى مسودة المعيار قبل بضعة أشهر)
  • الاستبعاد المتبادل (فئات كائن المزامنة)
  • متغيرات الحالة - وهذا أمر جيد بشكل خاص لنظام التشغيل Windows، حيث يصعب تنفيذ متغيرات الحالة بشكل صحيح في Win32.وهذا يعني أنه في النهاية يجب على Microsoft توفير الدعم لمتغيرات الحالة على الأقل في وقت تشغيل MSVC++، لذلك سيكون من السهل الحصول على دلالات متغيرات الحالة الصحيحة على WIn32.

ولعل هذا الفيديو قد تساعد على تسليط بعض الضوء بالنسبة لك :-)
HTTP: //channel9.msdn. كوم / وظائف / تشارلز / و-التزامن وقت تشغيل-الجميلة-محبب-التوازي ل-C /

والتزامن هو وجود مواضيع متعددة من التنفيذ لعملية معينة. اعتبارا من اليوم، C ++ لا يعتمد مباشرة عليه. ومع ذلك، العديد من المكتبات موجودة من شأنها أن تربط وظيفة معينة إلى موضوع جديد للتنفيذ. المعيار يونكس هو مكتبة بثريدس.

C++CSP2 - التزامن السهل لـ C++

http://www.cs.kent.ac.uk/projects/ofa/c++csp/

يعتمد CSP على نموذج متزامن مناسب بدلاً من الخيوط والأقفال وجميع أنواع الأشياء الأخرى التي يتم التعامل معها كفكرة لاحقة.

(انظر Occam-Pi للتعرف على لغة برمجة متزامنة (تعتمد أيضًا على CSP))

وبلدي يأخذ مختلفة قليلا، محددة إلى التوجهات المستقبلية لنماذج البرمجة:

والتزامن هو حول كتابة البرنامج بحيث يمكن القيام بأشياء متعددة في وقت واحد إذا كان الجهاز يدعم ذلك. حاليا، معظم لغات لديها آليات ثقيلة إلى حد ما ومعقدة للسماح للمبرمج لتحديد هذا (على سبيل المثال: المواضيع مع التزامن اليدوي، قانون الزواج توجيهات ما قبل المعالج، الخ).

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

وC ++ 0X وإضافة المزيد المدمج في دعم لأساليب "القديمة" من التزامن البرمجة. مختلف البائعين مترجم تضيف أساليب "الجديدة" التي مجردة طراز مؤشر الترابط وتسمح القرارات وقت التشغيل على أعداد من المواضيع، الخ (هذه البيانات تعتمد على الأجهزة من الجهاز). لمايكروسوفت على وجه الخصوص، نرى F # وقت التزامن، ملحقات موازية، وما إلى ذلك.

وعلى أمل أن يساعد.

وهذا هو أفضل مادة لفهم البرمجة المتزامنة: بالتزامن البرمجة

وسوف تحصل على صورة كاملة عن البرمجة المتزامنة وC ++ بعد قراءتها.

وكما ملخص سريع، يمكننا أن نقول أن البرمجة المتزامنة هو أن تفعل تعدد المهام. عندما يتم حجب برنامج، يمكن أن تفعل أشياء أخرى. عادة ما نحصل على سد أثناء انتظار اتصالات الشبكة والتعامل مع I / O. يمكننا تسهيل البرمجة المتزامنة باستخدام fork() وموضوع المكتبات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top