 بسم اللہ الرحمن الرحیم آج ہم موڈیول 136 دیسکس کریں گے موڈیول 136 ہے about local and global storage ہمیں دیکھا ہے کہ جب آپ تھریڈز کے ساتھ کام کرے ہیں تو تھریڈز کے اندر of course آپ لوکل ویریبلز بھی ٹفائن کر سکتے ہیں اور ایسی انفرمیشن جو آپ دوسی تھریڈز کے ساتھ شیر کرنا چاہر ہیں اس کو عام طور پہ آپ گلوپل سٹوریج کے طور پہ استعمال کرتے ہیں لیکن اگر آپ دونوں کو مکسپ کر دیں گے تو ہوسکتا ہے کہ آپ کے results بھی بری طرح سے متاصر ہو جائیں آپ کے results are unexpected آئے وہاں آئیں جو آپ چاہتے ہیں کہ results آئیں تو لوکل و گلوپل سٹوریج کا جو دفرنس ہے اس کو سمجھنا اور اس کو مینٹین کرنا اپنی کورد کے اندر بہت ضروری ہے اگر گلوپل و سٹوریج کے اندر سٹوریج میں اگر آپ میسٹے کرتے ہیں تو ہوسکتا ہے کہ آپ کا پورے کا پورا پورایم جو ہے وہ صحیح طرح سے work نہ کریں یا ساری کی صحیح طرح جو ہے وہ صحیح طرح سے work نہ کر پائیں اگر for example آپ ایک گلوپل ویریبلز دفعین کرتے ہیں اور وہ threat سپسیفک ڈیٹا جو ہے اس کے اندرہ پلیس کر سکتے ہیں تو وہ threat سپسیفک ڈیٹا جو ہے وہ ایکسیس بھل ہوگا تمام دوسری threats کو بھی لیکن آپ جاتے ہیں کہ وہ تو threat سپسیفک ڈیٹا ہے وہ اس threat کے لئے سپسیفک ہے تو اس threat کی اپنی working کے لئے صرف وہ data important ہے اگر کوئی دوسری threat اس data کے ساتھ کسی کسم کی interference کرے گی تو ہوسکتا ہے آپ کی اپنی threat ہے وہ صحیح طرح سے work نہ کریں تو جو threat سپسیفک ڈیٹا ہے وہ کبھی بھی آپ کسی گلوپل ویریبل کے اندرہ پلیس نہ کریں ایسا کرنے سے کیا ہوگا انکریک بھیویر آپ کے سامنے آئے گا جو results ہے وہ ہوسکتا ہے آپ کے پاس unexpected کسم کے results آئے تو global variables کو اگر آپ نے غلطری کیا سستمال کیا ہے جیسے کہ for example یہاں پہ استمال ہو رہا ہے اب یہاں پہ دیکھیں کہ n جو ہے یہ global variable اور یہ جو threat function کیا کرا جو اس کے اپنے arguments ہے اس میں سے information اٹھا کے n کے اندر پلیس کرا یہاں پہ یہاں پہ یہاں لی جو information ہے یہ جو ہے threat کے arguments میں سے یہ information collect کی گئی ہے اور اس information کو use کرتے بے اس نے کیا کیا n کی value کو change کر دیا جب کے n جو ہے ایک global variable اگر number of threats چل رہی ہے ایک threat function ایک threat function چال رہا ہے اسی طرح ایک اور threat function چال رہا ہے اور اسی طرح ایک اور threat function چال رہا ہے number of threat function چال رہا ہے ہر ایک n کو modify کرا یہ اپنے parameters اس کے اندر پلیس کرا یہ n کے اندر اپنے parameters پلیس کرا یہ n کے اندر اپنے parameters پلیس کرا اب کوئی بھی n کو سی طریق سے use نہیں کر پائے گا ہر ایک نے اپنے لحاظ سے n کو change کر دیا ہر thread یہ چاہتی تھی کہ اس کی جو SPECIFIC INFORMATION ہے وہ n کے اندر سٹور کریں لیکن کیونکہ n باقی threads کو بھی ایکسیس بل تھا ان دوسری threads نے بھی n کے اندر پڑی بھی value کو change کر دیا کیونکہ ساری threads کنکرنلی ران ہو رہنہا ہے ساری ہو سکتا n کو access کریں کبھی بھی n کو access کریں اور n کی value کو change کر رہے اب n کے اندر جو value پڑی بھی ہے وہ ساری threads کے لیے تقریبا نہیں meaning less ہو گئی ہے کیونکہ چاہ یہ threat رہی تھی کہ n کے اندر وہ اپنی SPECIFIC THREAD SPECIFIC INFORMATION رکھنے کی لیکن کیونکہ یہ اب information باقی threads کو بھی expose ہو گیا اور باقی threads نے بھی اس information کو change کر دیا تو اس لیے n کے اندر پڑی بھی جو بھی information ہے اس کو صحیح تریکہ سے آپ use نہیں کر پایں گے logical تریکہ سے use نہیں کر پایں گے results جو ہیں وہ آپ کے پاس جو ہیں وہ logically correct نہیں ہو گئے پھر اسی طرح سے یہ distinguished کرنا کہ جی آپ نے کب local variables کا استعمال کرنا ہے اور کب آپ نے global variables کا استعمال کرنا ہے یہ بہت ضروری ہے آپ کو اگر پتا ہے کہ ایک variable جو ہے اس کے اندر thread SPECIFIC INFORMATION ہے تو اس variable کو آپ local بنائیں گے اگر آپ کو پتا ہے ایک variable ایسا ہے جس کے اندر پڑی information دوسی threads نے بھی use کرنی ہے تو اس کو آپ may be global بنائیں گے اور پھر آپ کے پاس کوئی ایسا program ہے جوکہ single threaded system کے اندر لکھا گیا وہ single threaded program کو اگر آپ نے multithreaded program میں convert کرنا تو وہاں پہ اس طرح کی کئی problems جو ہیں آپ اس کی ایک example یہاں میں نظر آتی ہے اس program کے اندر دیکھ سکتے ہیں کہ یہ ایک single threaded program کے لیے لکھاگا کوڑ ہے اس single threaded کے اندر یہ دیکھیں کہ یہ ایک for loop ہے اور اس for loop کے اندر آپ اس thread function کو بار بار call کر رہے ہیں آپ ایک thread کو call کرتے ہیں اور اس سے جو information return ہوتی ہے وہ ان کے اندر store کر لیتے ہیں پھر دوسی thread کو call کرتے ہیں وہ execute ہوتی ہے اس سے جو information جو بھی result یہاں پہاں اپٹین ہوا وہ result جو آپ نے ایدر n کے اندر add کر دیا next will call کرتے ہیں اور next لی بھی اسی طرح اس طرح loop کے اندر جتری بھی threads ان کو باری باری یہ اب program جو لکھا گیا یہ single threaded کے لیے لکھا گیا ایک وقت میں ایک thread execute ہوگی کسی single threaded system کے لیے یہ program لکھا گیا sequentially یہ چال رہا ہے کہ sequentially ہر thread کی execution ہوتی ہے وہ اپنا result return کرتا ہے اور result جو ہے وہ آپ کسی ایک global variable کے اندر store کر دیتے ہیں اب اس program کو جب آپ multi threaded میں convert کریں گے تو آپ کے سامنے problem لائیں گی کیونکہ مختلف کئی ساری threads ہیں اور کب کسی thread return ہوتی ہے آپ کو نہیں پتا اور کس thread کی value جو ہے وہ n کے اندر جاتی ہے آپ کو نہیں پتا تو اس program کو اس طریقے سے analyze کرنا اور اس کو صحیح طریقے سے multi threaded terms کے اندر translate کرنا یہ بھی ایک skillful task ہے تو یہ skill بھی آپ میں develop ہونی چاہیے آپ کے اندر یہ understanding develop ہونی چاہیے کہ یہ جب thread concurrently run کریں گے تو ان کے flows جو ہے وہ کس طرح سے run ہوں گے اور ان کی concurrent processing جو ہے وہ ایک دوسرے کو کس طریقے سے effect کرے گی