كيفية استخدام Multithreading في C ++

Kyfyt Astkhdam Multithreading Fy C



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

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







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



إنشاء المواضيع في C ++

لإنشاء موضوع في C ++ ، نستخدم امتداد الأمراض المنقولة جنسيا :: موضوع class ، والتي يتم تضمينها في مكتبة الخيوط المدمجة. أ قابل للاستدعاء يتم توفيره كوسيطة لمنشئ كائن من الفئة الأمراض المنقولة جنسيا :: موضوع من أجل إنشاء موضوع جديد. يُعرف الرمز الذي يتم تنفيذه عندما يكون الموضوع نشطًا باسم قابل للاستدعاء . عندما نقوم ببناء ملف الأمراض المنقولة جنسيا :: موضوع الكائن ، يتم إنشاء مؤشر ترابط جديد ، مما يؤدي إلى توفير الكود بواسطة قابل للاستدعاء ليتم تشغيلها. قابل للاستدعاء يمكن تعريفها باستخدام هذه الطرق الثلاث.



الطريقة 1: مؤشر الوظيفة

قابل للاستدعاء يمكن تعريف الوظائف التي تستخدم مؤشر دالة على هذا النحو.





function_call باطلة ( حدود )

عندما يتم إنشاء الوظيفة ، يتم إنشاء كائن مؤشر ترابط يحتوي على الوظيفة على النحو التالي:



الأمراض المنقولة جنسيا :: موضوع thread_obj ( function_call ، المعلمات ) ؛

الطريقة 2: كائن الوظيفة

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

فئة Object_class {
عامل باطل ( ) ( حدود )
{
// كود ليتم تنفيذه
}
} ؛
الأمراض المنقولة جنسيا :: موضوع thread_object ( Object_class ( ) ، حدود )

الطريقة الثالثة: تعبير لامدا

قابل للاستدعاء يمكن تعريف الدوال التي تستخدم تعبير لامدا بهذا الشكل.

تلقائي و = [ ] ( حدود ) {
// كود ليتم تنفيذه
} ؛
الأمراض المنقولة جنسيا :: موضوع thread_object ( و ، المعلمات ) ؛

مثال على تعدد العمليات في C ++

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

func_thread باطل ( int N )
{
ل ( int أنا = 0 ؛ أنا < ن؛ أنا ++ ) {
كوت << 'Thread 1 :: callable => استخدام مؤشر دالة ' ؛
}
}

فئة thread_obj {
عام:
عامل باطل ( ) ( كثافة العمليات ) {
ل ( int أنا = 0 ؛ أنا < ن؛ أنا ++ )
كوت << 'Thread 2 :: callable => استخدام كائن دالة ' ؛
}
} ؛

انت مين ( )
{

تلقائي و = [ ] ( كثافة العمليات ) {
ل ( int أنا = 0 ؛ أنا < ن؛ أنا ++ )
كوت << 'Thread 3 :: callable => استخدام تعبير lambda ' ؛
} ؛

موضوع th1 ( func_thread ، 2 ) ؛

موضوع th2 ( خيط_obj ( ) و 2 ) ؛

موضوع th3 ( 2 ) ؛

th1. الانضمام ( ) ؛

th2. الانضمام ( ) ؛

th3. انضم ( ) ؛

يعود 0 ؛
}

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

انتاج |

مزايا وعيوب تعدد العمليات

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

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

خاتمة

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