 بسم اللہ الرحمن الرحیم آج ہم موڈول 132 دسکس کریں گے موڈول 132 کے اندر جس طرح کہ ہم پریویسلی بات کر چکے ہیں کرٹکل سیکشن کے بارے میں کہ ایک جو کنفلکٹ آتا ہے جب کنکرنٹ پروسیسنگ ہو رہی ہے پارلیزم ہو رہی ہے کئی تھریٹس جو ہیں وہ کنکرنڈ لی ران کر رہی ہے تو آپ کے سامنے جو پروبلم آتا ہے وہ پروبلم جو ہے ایک کرٹکل سیکشن کا پروبلم ہے جس کے اندر کے curiosity کرٹکل rest orصی اور ہوس کرٹکل rest orosی کو aٹ ClyME NUMBER OF PROCESSES 700 fewہ Vikassaоس کرنے کی ہقشت کرے وہ کرٹکل rest orosی کی PAUL سکتے کوائی بھی نانشارہ بول راس epoxy سکتای اگر کوئی ایک واقعہ سیکش ہے جس کو aٹا الحاید ان سارے رIT کرنے کی gefährہ نیک ہے تو وہ مرس Gokuent جو ہے وہ کرٹکل رسورس کلائے گا تو ہم اس کیلئے پر دیکھی ہے دیکھتے ہیں کہ اس کرٹکل رسورس کو کرٹکل سیکشن پروبرم کو حنڈل کرنے کا ایک بڑا سیمپل سا کیا سلوشن ہو سکتا لیکن وہ ایک سلوشن عام اپوگرامر اس کو از سلوشن پرسیف کرے گا لیکن اس سلوشن کے اندر کیا دروہ باکس ہو سکتے ہیں اس کے اندر بھی اگر کسی کسم کی کوئی کنفلٹس رائیز کر سکتے ہیں تو وہ کس طرح کی کنفلٹس ہیں یہ ابھی ہم دسکس کریں گے سیمپل سلوشن ہم کیسے پروائیٹ کر سکتے ہیں اس کے لیے ایک سیمپل طریقہ کہ اگر کئی ساری تھریڈس چال رہی ہیں تو ان تھریڈس کے لیے ہم ایک گلوپل ویریبل دفعین کر دیں سے اس گلوپل ویریبل کا امرام رکھ دیتے ہیں فلاگ تو فلاگ ہے گلوپل ویریبل ہے جو تمام کنکرنٹ تھریڈس کو ایکسیس بلہ جتنی بھی تھریڈس کنکرنٹ لیران کیا رہی ہیں ان تمام کو فلاگ جو ہے ایکسیس بلہ آپ کئی ساری تھریڈس ہیں جو کہ کسی ایک کریٹکل رسورس کو اکوائر کرنے کی کوشش کرتی ہیں تو اس فلاگ کی مدل سے وہ تھریڈس چیک کر سکیں گی کہ کئی دوسری تھریڈس کو ایک کریٹکل رسورس کو اس نے اکوائر تو نہیں کیا ہوا یہ ایک طرح سے اس گلوپل ویریبل کے تھریو ساری تھریڈس جو اپس میں کوپریٹ کر رہی ہیں اگر کسی تھریڈ کو اس کریٹکل رسورس کی ضرورت ہے تو وہ اس فلاگ کو ٹرو کر دے گا باکی تھریڈس اگر فلاگ ٹرو ہے تو وہ اس کریٹکل رسورس کو ایکسس نہیں کریں گی وہ ویٹ کریں گی اس رسورس کے اویلیبل ہونے کا اور جو ہی وہ رسورس اویلیبل ہوتا تو اس کو وہ ایکسس کرنے گی تو ہر تھریڈنے اگر اس کریٹکل رسورس کو ایکسس کرنا تو ایکسس کرنے سے پہلے ٹرو کر گئنا اور جب اس رسورس کو وہ use کرلتا تو اس فلاگ کو اس نے ویپس پالس کر گئنا اور اس کو use کرنے سے پہلے اس نے یہ بھی چیک کرنا کہ یہ فلاگ پہلے کوئی اور مادیفائیت ہنی کارا وہ کیسے چیک ہوگا فلاگ کی مدر سے اور فلاگ کی ویڈیوہ چیک کرے گا کہیں ٹرو تو نہیں اگر ٹرو ہے تو اس کا مطلب ہے already کوئی اور تھریڈ ہے جوکہ اس رسورس کو اس ویڈیبل کو ایکسس کرنے کی کوشش کر رہی ہیں اس کے لیے سمپل سا کوڈ ہے اس کوڈ کے اندر آپ دیکھ سکتے ہیں کہ فلاگ جو ہے وہ دفعین ہوگا ہے as a global variable فلاگ جسٹ ایک بولیین ہے اس کی ویڈیو ٹرو یا فالس ہو سبتی ہے اور جو n ایک global variable وہ بھی ایک global variable ہے جس کو کے تمام ٹرڈ جویں at a time ایکسس کرنے کی کوشش کر رہی ہیں آگے پھر ہمارا یہ ٹرڈ کا فنکشن ہے یہ ٹرڈ فنکشن کیا کرہا ہے اس کے لیے جو بھی پروسسنگ ہو رہی ہے جب اس نے n کو ایکسس کرنا ہوگا تو ایکسس کرنے سے پہلے یہ فلاگ کو کیا کرے گا ٹرو کرے گا ٹرو انڈیگیٹ کرہا ہے کہ یہ n کو چینج کرنے لگا اور اس کے اس میں چینج کیا ہے سمپل اس کو ایک انکریمنٹ کرہا ہے موڈیفائے کرہا ہے انکریمنٹ کرہا ہے اور جب یہ اس کو use کر لے گا اس کے بعد وہ فلاگ کو false کردے گا تو false کرنا ایک انڈیگیشن ہے for the other threads کہ اب اس نے shade variable کو اس global variable کو اس نے use کر لیا موڈیفائے کر لیا اب کوئی اور اگر اس کو موڈیفائے کرنا چاہتا تو کر لے اور اس سے پہلے اب یہ دیکھیں یہ ایک loop ہے یہ loop یہاں پر ختم ہو رہا یہ loop یہاں پر ختم ہو رہا اس کے اندر just flag کو چیک کیا جا رہا ہے اگر flag true ہے wild flag یعنی کہ flag true ہے یہ loop کرتا رہے گا اس loop کے اندر یہ ایک second wait کرے گا پھر سے flag کو چیک کرے گا اگر flag ابھی بھی true ہے پھر سے ایک second wait کرتا رہ گا اس طرح busy waiting رہے گا یہاں پر یہ کیا کر رہا ہے یہ this is busy waiting یہ busy waiting کرتا رہے گا کب تک busy waiting رہ گا جب تک flag اس کو true ملتا جو ہی false ملتا یہ loop break ہوگا اور اب یہ جاکے n کو increment کر لے گا اب اس کو اس طرح سے بھی understand کر سکتے کہ آپ کے پہاں سے ایک variable ہے flag جو کے global ہے اور اس کی value true یa false ہو سکتی ہے اور ایک variable ہے n اب آپ کے پاس number of thread چل رہے ہیں ایک thread function run ہو رہا ہے ساتھ ایک اور thread function run ہو رہا ہے ساتھ سمجھیں کہ ایک اور number of copies run ہو رہے ہیں of the same thread ساروں کے اندر جو y loop start ہوگا تو یہ flag کو چیک کرے گا یہ flag کو چیک کرے گا flag کی value یا تو true ہو گی یا false ہو گی اسے initially اس کی value false ہے تو یہ concurrently run ہو گا رہے ہیں ان کے بیچ میں switching کرے ہیں اس میں سے کوئی بھی ایک جو ہے وہ flag کی value کو access کرتا flag کی value اس کو کیا ملتی ہے flag کی value اس کو false ملتی ہے ابھی یہ ہو سکتا ہے یہ والا part execute کر رہی ہے یہ والی thread بھی ہو سکتا ہے یہ والا part execute کر رہی ہے تو ابھی یہ y loop نہیں آئی یہ y loop پہ آگی اس نے flag کو چیک کیا اس کو flag کی value کیا ملی false ملی false ملنے پہ یہ loop break ہوگا اور یہ flag کی value کو کیا کردے گا flag کی value کو true کر دے گا true کرنا انڈیکیٹ کرتا ہے کہ اب یہ n کی value کو modify کرا جب یہ n کی value کو modify کرا رہا ہے اس دوران اگر contact switching ہوتی ہے اور اس thread کے پر execution جاتی ہے اور اپنی خود سے n کو modify کرنے کی کوشش کرتے ہیں تو کیا ہوگا یہ loop جو ہے یہ busy waiting میں چلا جائے گا یہ والا loop بھی جو ہے busy waiting میں چلا جائے گا کیوں کیوں کہ flag کی value اس وقت کیا ہوگی ہے flag کی value اس وقت true ہوگی یہ global variable ہے یہ ساری threads کو accessible گا کیوں کہ یہ true ہے تو باقی کوئی بھی n کی value کو access نہیں کر سکے گا n کی value کو access کرنے سے پہلے یہ busy waiting میں چلا جائے گا یہاں پہ اس نے n کو increment کیا n کو increment کرنے کے بعد اس نے flag کو false کر دیا flag کو false کرنے کے بعد کہیں پہ یہ execution کر رہا ہے اور switching ہوتی ہے اس loop کے انداز آتا ہے تو اب اس کو flag کی value گا ملے گی اب اس کو flag کی value false ملے گی جس کسی کو false ملے گی اب یہ جا کے اپنے n کو modify کر سکے گا تو اس طرح سے یہ آلگریڈم اس چیز کو انشور کرنے کی کوشش کرتا ہے کہ یہ آلگریڈم اس چیز کو انشور کرنے کی کوشش کرتا ہے کہ صرف ایک وقت میں a کی process n کی value کو modify کر سکے لیکن پھر بھی اس آلگریڈم کے اندر کچھ flaws ہے وہ flaw اس طرح سے ہم کہ آپ یہاں پر flag is equals to true why loop اس کا break ہو جاتا why loop اس thread کا پہلی thread اگر for example ہم کہتے ہیں اس کا why loop break ہو جاتا next statement میں اس نے false کو flag کو true کر دینا لیکن flag کو true کرنے سے پہلے ہی اس point کے پر switching ہوتی ہے اور دوسر thread کے پر execution چلے جاتی ہے جس دوسری thread کے پر execution چلے جاتی ہے اس کو flag کیا ملے گا اس کو flag ابھی false ہی ملے گا کیونکہ ابھی flag true نہیں ہوتا true ہونے سے پہلے ہی switching ہوگی لیکن previous thread کا loop break ہو گیا تھا اب اس کو کیونکہ false ملے گا تو اس کا بھی loop break ہو جائے گا یہ جاکے n کو increment کر دے گا اور پھر یہ بھی جاکے n کو increment کر دے گا اس کے if break ہونے کے بعد اگر switching ہوتی ہے تو یہ بھی n کو access کر لے گا critical section میں enter ہو جائے گا یہ بھی critical section میں enter ہو جائے گا تو multiple processes at a time اس کو modify کر رہے ہوں گا ہم یہ چیز نہیں چاہتے تو اس program کے اندر ایک fault ہے جس کی وجہ سے ہم یہ والی تکنیگ یہ use نہیں کر سکتے اس کے alternately ایک اور تکنیگ ہو سکتی ہے وہ تکنیگ کیا ہوسکتی ہے کہ جتنے بھی threads ہے تمام threads n کی اپنی ایک local copy use کرے اس کے اس کے اندر n کی copy جو ہے local ہے اب اگر کوئی بھی process جو ہے وہ n کو increment کرے گا تو وہ کر سکتا ہے کیونکہ اس کے اندر تو critical resource ہی نہیں ہے یہ share دی نہیں ہے یہ تمام globally نہیں ہے تمام thread اس کو use نہیں کرے ہرے کے پاس اپنی اپنی copy ہے تو یہاں پہ آپ کو mutual exclusion کی ضرورت نہیں ہے لیکن پھر یہ ہوسکتا کہ آپ کا جو اپنے program کا اپنا logic ہے اس logic according لی اس کی suitability گی according لی آپ کو ہوسکتا ہے کہ n جو ہے as a global variable ہی required ہوتا یہاں پہ جبکہ آپ n کو use کرے ہیں as a local variable جو program ہے وہ threads ہیں وہ اپس میں n کے through کچھ information share کرنا چاہئے ایک thread نے کچھ operation perform کیا n کی value کو increment کر دیا اور وہ incremented value دوسری thread use کرے گی اور اس incremented value کو use کر کے آگے کوئی decision perform کرے گی اب اگر ہرے کے پاس n اپنا اپنا local ہے تو اس طرح سے ایک thread دوسری thread کو information pass نہیں کر سکے گی تو یہ والا جو method ہے یہ بھی fail ہو جاتا ہے یہ والا method بھی work نہیں کرے گا اور previous جو ہم نے this software oriented method نکالا ہے یہ method بھی work نہیں کرے گا ہمیں کوئی ایک operating system based approach چاہیے جس کی مذہ سے ہم یہ assure کر سکے ہم critical section کے اندر جب ایک thread enter ہوگی تو اس دوران کوئی دوسری thread enter now