 بسم اللہ الرحمن الرحیم آج ہم موڈیول 158 دیسکس کریں گے موڈیول 158 کے اندر ہم دیکھیں گے کہ اگر سنکرونیزیشن کو انفورس کیا جاتا ہے تو آپ کے پاس مختلف طریقے ہیں اور ہر طریقے سے اگر انفورس کیا جائے تو اس کا پرفومنس کی اوپر کیا امپیکٹ پڑتا ہے تو گیجنگ پرفومنس امپیکٹ آف سنکرونیزیشن سنکرونیزیشن انفورس کرنے کے لیے جسا ہم نے دیکھا تھا ہمارے پاس مختلف کسم کے کنسٹرکٹس اویلے بل ہیں جس میں کرتیکل سیکشن ہے جس میں میو ٹیکسیز ہیں جس میں سامہ فورز ہیں تو ان ساروں کی مدل سے اگر ہم سنکرونیزیشن انفورس کرکیں تو کچھ آپ کے ٹریڈ آفس ہیں پرفومنس وائز تو ہم دیکھیں گے کونسا سٹرکٹر جو ہے اس سے کس طرح کا ٹریڈ آف آپ کو دینا پڑتا ہے کونسا موست اوپٹیمل ہے کونسا لیست اوپٹیمل ہے تو اس کے لیے ہم ایک بڑا سیمپل سا پرگرام دوائیس کریں گے اور اس پرگرام کے اندر کچھ ہمارے پاس دیتا ہوگا جس دیتا کو ہمارے مختلف کسم کی ٹریڈز ہوں گی جو کہ اس دیتا کو پروسس کریں گی اور وہ دیتا جو ہے ہم اس طریقے سے میمبری کے اندر ارینج کریں گے ایک اپٹیمل طریقے سے میمبری کے اندر ارینج کریں گے تاکہ کسی کسم کے کش کنفلکٹس نہ آئے اس علاینمنٹ کو use کرنے کے لیے جو ایک درکٹر و ایک مادیفائر use ہو رہا ہے وہ آپ کو سکرین کے اوپر نظر آ رہا ہوگا ڈل سپیک علاین تو اس مادیفائر کو use کر کے جب آپ کی میمبری رینج ہوگی کش کے اندر تو اس طریقے سے رینج ہوگی کہ اس کے اندر میمبری کنڈینشن آئے اور پھر اسی طرح سے جو میمبری کو علاکٹ کرنے کے لیے اور میمبری کو فریق کرنے کے لیے اس کو بھی علاین کر کے کہہ رہے ہیں تاکہ وہ اپٹیمال بانڈریز کے اوپر علاین اور میمبری کنڈینشن آئے اس کے اندر ہمارے پاس ایک سرٹن نمبر of تھریڈز ہوں گی وہ آپ کم بھی کر سکتے ہیں زیادہ بھی کر سکتے ہیں خود سے آپ سپیسفائے کریں گے کتنی تھریڈز ہیں اور وہ ہر تھریڈز جو ہے بڑا ایک سمپل سا ٹاس پر فارم کری ہوگی اور بسکلی آپ نے ان نمبر of تھریڈز کو رن کر کے دیکھنا ہے یہ دیکھنا ہے کہ جو overall آپ کا پوگرم اس کی کیا پر فارمن سے جب پوگرم آپ لکھیں گے تو اس کو مخلیب تریکوں سے لکھیں گے یعنی کہ جس طرح سے آپ کے پاس مخلیب کسم کے سرٹرز ہیں جس طرح قریٹکل سیکشن ہے یا جس طرح میوتیکس ہے تو قریٹکل سیکشن کو یا انٹلوکٹ فنکشن ہے انٹلوکٹ فنکشن کی بدل سے آپ دفرند پوگرم لکھیں گے قریٹکل سیکشن کی بدل سے آپ دفرند پوگرم لکھیں گے لکھیں گے اور میو ٹیکسز کی بہتہ سے دفرن پرکرام لکھیں گے اور ان تینوں کو باری باری ران کر کے آپ چیک کر سکتے ہیں کہ کونسا جو پرکرام ہے اس نے بسٹ پرفارم کیا تو پرکرام کا سٹرکچر کیلئے جو موڈل use کریں وہ وہی موڈل ہے بوس ورکر موڈل ہے اس کے اندر ایک بوس ٹریڈ ہوگی اور کئی ساری ورکر ٹریڈ ہوگی وہ جو بھی آپ نے اپریشن پرفارم کرنا ہے وہ کئی ساری ورکر ٹریڈ کے بیچ میں ڈوائیڈ ہو جائے گا اور بوس ٹریڈ جو وہ ان تمام ورکر ٹریڈ کو کنٹرول کری ہوگی تو انٹرلوکٹ فنکشنز کا ہم ایک پرکرام لکھیں گے جس میں کے انٹرلوکٹ فنکشنز کا استعمال ہو رہا ہے ایک اندر میو ٹیکسز کا استعمال ہو رہا ہے اور ایک اندر کرٹکل سیکشن کا استعمال ہو رہا ہے اس پرکرام کے اندر آپ دیکھ سکتے ہیں یہ آپ کی ہیٹر فائل ہے already ہم نے اس ہیٹر فائل کو دسکتے ہیں اس ہیٹر فائل کے اندر تمام کیسم کی ہیٹرز ہیں اس ہیٹر فائل کو آپ نے انکلوڈ کر لیا آپ نے اپنا ایک میکرو یہاں پر دفائن کیا ہے ڈلے کاونٹ اور ایک کش لائن سائز کش لائن سائز کو آپ نے 64 رکھا ہے اپٹیملی جو موست کہ لیکن جو کور پروسسز ہیں اس لئے 64 اپٹیمل رہتا ہے پھر اس کے بعد یہ آپ کا ورکر ٹریڈ کا پروٹوٹایپ ہے اور یہ آپ نے ایک ورکر ٹلیہ یہ آپ نے اپنا ایک ویریبرل دفائن کر لیا جس کو کہ ٹلیہ کاونٹ سے آپ نے انیشلائس کر لیا ٹلیہ کاونٹ آپ کچھ بھی رکھ سکتے ہیں مختلف ویلیوز کے ساتھ آپ ٹلیہ کاونٹ کو چیک کر سکتے ہیں اور پھر یہ ہمارا وہ علائن کا موڈفائر ہے اس کے اندر آپ دیکھ سکتے ہیں کہ موڈفائر اوز ہو رہا ہے وہ جو اپنے پریویسلی دسکتے ہیں یہ موڈفائر اس کو یہ بتا رہا ہے کہ اس نے کاش کے اندر جو ارینجیمنٹ کرنی ہے میمری کو اس تری کیسا کرنی ہے کہ کاش لائنز کے سائیز کے اوپر وہ علائنڈ ہوں اس طرح سے کاش کے اندر جو کنٹنشن آئے گی وہ مینیمل ہوگی پھر اس کے لیوہا یہ ہمارا ایک دیتا سٹرکچر ہے یہ دیتا سٹرکچر use ہو رہا ہے ٹریڈ کو جو values pass ہوں گے ہر ٹریڈ کو ہم ایک پرامیٹر کے ترو ایک دیتا سٹرکچر کے ترو values pass کر سکتے ہیں اس کے نمخطرف قسم کی آپ نے fields specify کیا آپ کی requirment کیا according لی پھر آپ کا جو main program ہے اس main program کے اندر آپ نے اپنے handle specify کیا handle to worker thread handle to you mutex اور یہ آپ کی ایک array ہے threads کی array ہے جو کہ آپ نے threads کو pass کرنی ہے اور اس پرام کو بسکلی آپ دو argument pass کریں گے وہ argument وہ argument week اندر جائیں گے اور seek اندر اس کا count ہوگا تو یہاں پہ جسٹ وہ argument وہ display ہو رہے ہیں اور یہاں پہ یہ بھی چاہتے ہے کہ argument وہ force ایک seed نہ کریں آگے یہاں پہ mutex create کیا جہاں جتنی بھی threads ہیں وہ ایک single mutex کی مدد سے سنکرونائیزوں کیا یہاں پہ ہم mutex کے استمال سے سنکرونائیز اشن کر رہے ہیں اور اس پرام کو مزید موڈفائے کر کے آپ وہ یہاں پہ mutex کی جگہ critical section کا بھی استمال کر سکتے ہیں یہاں پہ آپ interlocked functions کا بھی استمال کر سکتے ہیں آپ نے یہاں پہ worker کیلئے memory allocate کی اور آپ نے یہاں پہ جو thread کو parameter pass کرنا ہے اس کے لیے بھی میں یہاں پہ memory allocate کر لیے اگر یہ memory allocate ہو جاتی ہے تو یہاں پہ کسی کسی کسم کا error نہیں آئے گا یہ نال نہیں ہوگا آپ آگے continue کر سکتے ہیں گر ان میں سے کوئی بھی value نال ہے اس کا مطلب ہے کسی کسی کسم کا error آئے گا یہاں پہ ہمارا loop چال رہا ہے جتنی threads ہیں اتنی دفعہ یہ loop چلے گا اور ہر iteration میں ہم بسکلی کیا کر رہے ہیں ہر iteration کے اندر ہم ایک جو thread ہے اس کے جو parameters ہیں ان کو values assign کر دیتے ہیں ان کو values assign کر سکتے ہیں tasks پر thread اور tasks complete جو ہے اس کو بھی فلال 0 کر دیتے ہیں mutex کا handle specify کر دیتے ہیں اور پھر ہم begin thread کی مدہ سے thread run کر دیتے ہیں شروع کر دیتے ہیں اور thread کا handle جو ہے وہ اس ایرے ایک اندر place کر دیتے ہیں اور اب یہ thread جو اگر سب کو صحیح چلتا ہے کسی کسم کا error نہیں آتا تو ہماری جو thread ہے وہ چلنی شروع ہو گئی ہے اور پھر ہر thread کے لیے آپ wait for single object call کریں اس loop کے اندر wait for single object call کریں تو ہر thread جب تک complete نہیں ہو جائے گی یہ loop جو ہے یہاں پے wait کر تا رہے گا once یہ loop یہاں پے ختم ہوتا ہے تو اس کا مدد تمام threads جو وہ complete ہو گئی ہیں اس کے اس کے اندر آپ نے جو memory allocate کیوی اس کو آپ deal locate کرنا شروع کر دیں گے اور آپ یہاں پہ میسج بھی دے سکتے ہیں جو بھی values آپ نے اس نے compute کیا آپ کی thread نے اس کے according لی یہاں پہ display کیا جا رہا ہے ان parameters کے اندر جو value پڑی بھی now thread کیسے کام کرتی ہے وہ ہم آگے چل کے دیکھ رہے ہیں thread بڑی سمبل سی ایک thread ہے اس کو آپ نے arguments pass کیا جو arguments pass کیا وہ اس نے structure کی اندر place کر دیا on arguments کی اندر just simply جو major چیز ہے وہ ہے کہ ایک value پڑی ہوگی number of tasks to complete اور جب تک task complete نہیں ہوتے یہ ایک simple سے loop کی اندر چل رہا ہے ہر loop کی اندر یہ ایک دفعہ task complete کو ایک increment کر رہا اور ساتھ ہی ساتھ پہلے ایک delay کرے گا CPU کو تھوڑی در کے لیے delay کر رہا ہے گا اور پھر اس task کو ایک increment کرتے گا یہ loop چلتا رہے گا جب تا کہ اس کو assign task ہے وہ complete نہیں ہوتا جب تا یہ اتنی value نہیں آ جاتی جتنی case کو assign کی گئی ہے to simply بڑی سمبل کسم کی thread ہے اس نے کچھ بھی نہیں کرنا اس نے just ایک value کو increment کرنا ہے اور تھوڑا سا delay produce کرنا اور جب وہ ایک specific value تک پہن جائے گی value تو یہ thread جو ہے یہ break ہو جائے گی