C++ میں ملٹی تھریڈنگ کا استعمال کیسے کریں۔

C My Ml Y T Ry Ng Ka Ast Mal Kys Kry



ملٹی تھریڈنگ ایک ہی پروگرام کے اندر ایک سے زیادہ تھریڈز کو چلانے کا تصور ہے۔ یہ پروگرامنگ زبانوں جیسے C++ میں ایک بہت ہی کارآمد خصوصیت ہے کیونکہ یہ ہمیں ایک ساتھ متعدد آپریشنز کرنے کے قابل بناتی ہے۔ C++ میں، ملٹی تھریڈنگ کے ذریعے حاصل کیا جا سکتا ہے۔ لائبریری، جو کلاسز اور فنکشنز کا ایک سیٹ فراہم کرتی ہے جو ڈویلپرز کو متعدد تھریڈز بنانے، ان کا نظم کرنے اور کنٹرول کرنے کی اجازت دیتی ہے۔

ملٹی تھریڈنگ ملٹی ٹاسکنگ کی طرح ہے۔ اس کا مطلب ہے کہ بیک وقت دو یا زیادہ تھریڈز چل رہے ہیں۔ اس طرح کے پروگرام میں، ہر جزو کو ایک دھاگے کے طور پر کہا جاتا ہے، اور ہر تھریڈ عملدرآمد کا ایک منفرد راستہ بتاتا ہے۔ کے لیے کوئی بلٹ ان سپورٹ نہیں ہے۔ ملٹی تھریڈڈ C++ 11 سے پہلے کے پروگرام۔ یہ فیچر اس کے بجائے مکمل طور پر آپریٹنگ سسٹم کے ذریعے فراہم کیا گیا ہے۔







ملٹی تھریڈنگ ایک پروگرام کو چھوٹے دھاگوں میں تقسیم کرنے کے طور پر بھی کہا جا سکتا ہے جو ایک ساتھ چلتے ہیں۔ تھریڈ کلاس، جس کے لیے استعمال ہوتا ہے۔ ملٹی تھریڈنگ C++ میں، آپ کو متعدد تھریڈز بنانے اور ان کے نفاذ کا انتظام کرنے کے قابل بناتا ہے۔



C++ میں تھریڈز بنائیں

C++ میں تھریڈ بنانے کے لیے، ہم استعمال کرتے ہیں۔ std::دھاگہ کلاس، جو بلٹ ان تھریڈ لائبریری میں شامل ہے۔ اے کال کے قابل کلاس کے کسی شے کے کنسٹرکٹر کو دلیل کے طور پر فراہم کیا جاتا ہے۔ std::دھاگہ ایک نیا تھریڈ بنانے کے لیے۔ کوڈ جو ایک تھریڈ کے فعال ہونے پر عمل میں لایا جاتا ہے کے طور پر جانا جاتا ہے۔ کال کے قابل . جب ہم ایک بناتے ہیں۔ std::دھاگہ اعتراض، ایک نیا دھاگہ قائم ہوتا ہے، جس کی وجہ سے فراہم کردہ کوڈ ہوتا ہے۔ کال کے قابل چلانے کے لیے کال کے قابل ان تین طریقوں کا استعمال کرتے ہوئے وضاحت کی جا سکتی ہے.



طریقہ 1: فنکشن پوائنٹر

کال کے قابل فنکشن پوائنٹر کا استعمال کرتے ہوئے افعال کو اس طرح بیان کیا جاسکتا ہے۔





void function_call ( پیرامیٹرز )

جب فنکشن بنایا جاتا ہے تو، فنکشن پر مشتمل ایک تھریڈ آبجیکٹ اس طرح تیار ہوتا ہے:



std::thread thread_obj ( فنکشن_کال، پیرامیٹرز ) ;

طریقہ 2: فنکشن آبجیکٹ

فنکشن آبجیکٹ کا استعمال کرتے ہوئے، ہم آپریٹر اوور لوڈنگ کے خیال سے فائدہ اٹھاتے ہیں۔ کوڈ جو تھریڈ کے بننے کے دوران چلایا جانا چاہیے اوورلوڈ فنکشن میں موجود ہے۔

کلاس آبجیکٹ_کلاس {
باطل آپریٹر ( ) ( پیرامیٹرز )
{
// کوڈ کو عمل میں لانا ہے۔
}
} ;
std::thread thread_object ( آبجیکٹ_کلاس ( ) پیرامیٹرز )

طریقہ 3: لیمبڈا اظہار

کال کے قابل لیمبڈا اظہار کا استعمال کرتے ہوئے افعال کو اس طرح بیان کیا جاسکتا ہے۔

آٹو f = [ ] ( پیرامیٹرز ) {
// کوڈ کو عمل میں لانا ہے۔
} ;
std::thread thread_object ( f، پیرامیٹرز ) ;

C++ میں ملٹی تھریڈنگ کی مثال

# شامل کریں
# شامل کریں
نام کی جگہ کا استعمال کرتے ہوئے std؛

void func_thread ( int N )
{
کے لیے ( int i = 0 ; میں < ن; i++ ) {
cout << تھریڈ 1 :: کال ایبل => فنکشن پوائنٹر کا استعمال \n ' ;
}
}

کلاس تھریڈ_obj {
عوام:
باطل آپریٹر ( ) ( int n ) {
کے لیے ( int i = 0 ; میں < n i++ )
cout << تھریڈ 2 :: کال ایبل => فنکشن آبجیکٹ کا استعمال \n ' ;
}
} ;

اہم int ( )
{

آٹو f = [ ] ( int n ) {
کے لیے ( int i = 0 ; میں < n i++ )
cout << تھریڈ 3 :: کال ایبل => لیمبڈا ایکسپریشن کا استعمال \n ' ;
} ;

تھریڈ 1 ( func_thread 2 ) ;

تھریڈ th2 ( thread_obj ( ) , 2 ) ;

تھریڈ th3 ( 2 ) ;

th1.join ( ) ;

th2.join ( ) ;

th3.join ( ) ;

واپسی 0 ;
}

مندرجہ بالا کوڈ میں، ہم نے تین الگ الگ تین تھریڈ تیار کیے ہیں۔ کال ایبلز - ایک فنکشن پوائنٹر، ایک آبجیکٹ، اور ایک لیمبڈا اظہار۔ ہر تھریڈ کو دو الگ الگ مثالوں کے طور پر شروع کیا گیا ہے۔ تین دھاگے بیک وقت اور الگ الگ فعال ہیں، جیسا کہ آؤٹ پٹ میں اشارہ کیا گیا ہے۔

آؤٹ پٹ

ملٹی تھریڈنگ کے فائدے اور نقصانات

کی بدولت مزید کام تیزی سے ہو سکتے ہیں۔ ملٹی تھریڈنگ . اس کی وجہ یہ ہے کہ یہ متعدد دھاگوں کو ایک ساتھ مختلف کام انجام دینے کی اجازت دیتا ہے۔ ملٹی تھریڈنگ پروگرامرز کو نیٹ ورک کی سرگرمیاں کرنے، تصاویر یا ویڈیوز پر کارروائی کرنے، اور بقیہ ایپلیکیشن کو سست کیے بغیر پیچیدہ کمپیوٹیشن کرنے کی اجازت دیتا ہے۔ ملٹی تھریڈنگ یوزر انٹرفیس کو زیادہ جوابدہ بنانے میں مدد کرتا ہے۔ ایک علیحدہ تھریڈ میں اسکرین کو تبدیل کرنے والے کوڈ کو چلانے سے، UI تھریڈ کو دوسرے کاموں کو انجام دینے کے لیے آزاد رکھا جاتا ہے، جیسے کہ صارف کے ان پٹ کا جواب دینا۔ اس کا نتیجہ ہموار اور تیز یوزر انٹرفیس میں آتا ہے۔

تاہم، استعمال کرنے کے لئے کچھ حدود ہیں ملٹی تھریڈنگ . کے ساتھ کام کرتے وقت اہم چیلنجوں میں سے ایک ملٹی تھریڈڈ پروگرام ریس کے حالات سے گریز کر رہے ہیں۔ ریس کی حالت ایک ایسی صورتحال ہے جہاں دو یا دو سے زیادہ تھریڈز ایک ہی وقت میں ایک ہی مشترکہ وسائل تک رسائی حاصل کرنے کی کوشش کر رہے ہیں، جس کی وجہ سے غیر متوقع سلوک ہوتا ہے۔ دوڑ کے حالات سے بچنے کے لیے، ڈویلپر مطابقت پذیری کی تکنیکوں کا استعمال کرتے ہیں جیسے کہ mutexes، سیمفورس، اور رکاوٹیں.

نتیجہ

ملٹی تھریڈنگ C++ میں ایک طاقتور تصور ہے جو ڈویلپرز کو ایسے پروگرام بنانے کی اجازت دیتا ہے جو بیک وقت متعدد کام انجام دے سکیں۔ لائبریری کی طرف سے فراہم کردہ تھریڈ کلاس کا استعمال کرتے ہوئے، ڈویلپر ایک سے زیادہ تھریڈز بنا سکتے ہیں، ان کا نظم کر سکتے ہیں اور ان کو کنٹرول کر سکتے ہیں۔ ملٹی تھریڈنگ کارکردگی کو بہتر بنانے، ردعمل بڑھانے، اور سسٹم کے وسائل کی حدود پر قابو پانے کے لیے استعمال کیا جا سکتا ہے۔ تاہم، کے ساتھ کام کرنے میں ملوث چیلنجوں کی وجہ سے ملٹی تھریڈڈ پروگراموں، ڈویلپرز کو محتاط رہنے کی ضرورت ہے اور دوڑ کے حالات سے بچنے کے لیے مطابقت پذیری کی مناسب تکنیکوں کا استعمال کرنا چاہیے۔