كيفية تنفيذ تعدد مؤشرات الترابط في C++

Kyfyt Tnfydh T Dd Mwshrat Altrabt Fy C



يعد تعدد مؤشرات الترابط في لغة C++ ميزة تسمح للشخص بأداء مهام متعددة في وقت واحد بشكل متزامن. الخيط هو وحدة العمل لعملية معينة يتم تنفيذها. يتم تنفيذ العديد من سلاسل العمليات بشكل مستقل عن بعضها البعض في نفس الوقت لإجراء تعدد مؤشرات الترابط.

كيفية تنفيذ تعدد مؤشرات الترابط في C++

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







المتطلبات الأساسية لتعدد مؤشرات الترابط في C++

في نظام التشغيل Windows، يمكن تنفيذ الوظائف المتعلقة بالسلاسل في الإصدار C++ 11 والإصدارات المتقدمة. أثناء استخدام برنامج التحويل البرمجي Dev-C++، يكون افتراضيًا على الإصدار C++ 3، لذلك يجب تغييره إلى الإصدار C++ 11 يدويًا. يمكن تحديد بيئة GNU C++ 11 عن طريق تغيير إعدادات اللغة القياسية.



افتح برنامج التحويل البرمجي Dev-C++ وانتقل إلى 'الأدوات' في شريط المهام. حدد 'خيارات المترجم' ثم حدد 'الإعدادات'، وانقر فوق كتلة 'إنشاء التعليمات البرمجية' وستظهر قائمة بالأوامر. حدد GNU C++ 11 من 'Language Standard(-std)' ثم انقر فوق OK. الآن تم إعداد هذا المترجم لدعم عمليات سلسلة الرسائل.




قم بتنزيل المكتبات من جيثب ووضعها في مجلد lib الخاص بالمترجم Cpp. قم باستدعاء هذه المكتبات في البرنامج باستخدام ملفات الرأس #include “mingw.thread.h” و، وفيما يلي تركيبها:





std :: موضوع thread_object ( قابل للاستدعاء ) ;


يتم دعم std::thread بواسطة ملف الرأس #include 'mingw.thread.h' في C++ 11. إنها فئة خيط وتمثل خيطًا واحدًا. يتم إنشاء مؤشر ترابط جديد باستخدام std::thread ويتم تمرير كائن قابل للاستدعاء إليه. Callable هو رمز قابل للتنفيذ، يتم تنفيذه عند تشغيل مؤشر الترابط. يمكن أن يكون Callable أيًا من الأنواع الثلاثة الواردة أدناه:

عندما يتم إنشاء كائن، فإنه يطلق مؤشر ترابط جديد، الذي ينفذ التعليمات البرمجية في الكائن القابل للاستدعاء.



إطلاق مؤشر الترابط باستخدام كائن الوظيفة

يمكن استخدام كائن دالة ككائن قابل للاستدعاء لتشغيل مؤشر الترابط، ويجعله عامل التحميل الزائد () قابلاً للاستدعاء:

فئة function_object_class {
عامل باطل ( ) ( المعلمات )
{
صياغات؛
}
}
std :: موضوع thread_object ( function_object_class ( ) ، المعلمات )


يتم توفير وظيفة التحميل الزائد للمنشئ باعتباره الكائن الأول والبيانات باعتبارها الكائن الثاني.

إطلاق مؤشر الترابط باستخدام مؤشر الوظيفة

يتم تعريف مؤشر الدالة، ثم يتم استخدامه كأداة قابلة للاستدعاء لتشغيل مؤشر ترابط:

وظيفة باطلة_call ( المعلمة )
{
صياغات؛
}
std::thread thread_obj ( function_call، المعلمات ) ;


تتم كتابة الوسائط المطلوب تمريرها بعد اسم الوظيفة.

إطلاق الموضوع باستخدام تعبير Lambda

يمكن إطلاق كائن مؤشر الترابط باستخدام لامدا ككائن قابل للاستدعاء.

// تحديد تعبير لامدا
السيارات و = [ ] ( المعلمات )
{
صياغات؛
} ;

std :: موضوع thread_object ( و، المعلمات ) ;


يتم تعريف تعبير لامدا، ويتم استدعاء المعلمات فيه لبدء تشغيل الخيط.

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

انت مين ( )
{

الأمراض المنقولة جنسيا :: الموضوع t1 ( قابل للاستدعاء ) ;
t1.join ( ) ;
صياغات؛
}

مثال

هذا هو البرنامج الذي يتم تنفيذه لأداء تعدد العمليات باستخدام الثلاثة القابلة للاستدعاء. ثلاثة أنواع مختلفة قابلة للاستدعاء تنفذ أوامرها بشكل متزامن ثلاث مرات دون أن يقاطعها بعضها البعض:

#تشمل
#تشمل <الخيط>
استخدام اسم للمحطة؛


فو باطلة ( إنت ز )
{
ل ( إنت ط = 0 ; أنا < ض؛ أنا++ ) {
cout << 'الخيط باستخدام الوظيفة'
'المؤشر قابل للاستدعاء ' ;
}
}


class thread_obj {
عام:
عامل باطل ( ) ( كثافة العمليات س )
{
ل ( إنت ط = 0 ; أنا < س؛ أنا++ )
cout << 'الخيط باستخدام الوظيفة'
'كائن قابل للاستدعاء ' ;
}
} ;


// كود الرئيسي
انت مين ( )
{
cout << 'المواضيع 1 و 2 و 3'
'تعمل بشكل مستقل'
<< نهاية؛


موضوع ث1 ( فو, 3 ) ;


موضوع ث2 ( thread_obj ( ) , 3 ) ;


السيارات و = [ ] ( كثافة العمليات س ) {
ل ( إنت ط = 0 ; أنا < س؛ أنا++ )
cout << 'الموضوع باستخدام لامدا'
'التعبير قابل للاستدعاء ' ;
} ;


موضوع th3 ( 3 ) ;

th1.join ( ) ;

th2.join ( ) ;

th3.join ( ) ;

يعود 0 ;
}


في هذا البرنامج، يتم استخدام ثلاثة مؤشرات قابلة للاستدعاء، بما في ذلك مؤشر الوظيفة وكائن الوظيفة وتعبير لامدا، لتشغيل الخيوط الثلاثة بشكل متزامن. تطبع الخيوط 1 و2 و3 قيمها بشكل متزامن، بشكل مستقل عن بعضها البعض، دون أن يقاطعها بعضها البعض. يطبعون قيمهم ثلاث مرات. يتم استخدام وظيفة join () لانتظار انتهاء سلسلة الرسائل.


يتم عرض مخرجات المواضيع الثلاثة بشكل مستقل ويتم تكرارها ثلاث مرات. ينتظر كل خيط أن ينتهي الآخر أولاً.

خاتمة

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