 بسم اللہ الرحمن الرحیم آج ہم موڈیول 139 دیسکس کریں گے موڈیول 139 ہے about critical section object جس طرح ہم نے پریویسلی دیکھا ہے یہ windows جو مختلف بسم کے objects support کرتی ہے for synchronization and mutual exclusion یہ critical section ایک windows کا ہی object ہے جس کو کہ آپ use کر سکتے ہیں to impose synchronization یا mutual exclusion critical section بیسے آپ کو پتا ہے generally critical section کیا ہے critical section آپ کے program کا ایک part ہے part of the code ہے اور وہ code ایسی sensitive ہے کہ جس کو آپ concurrently execute نہیں کر سکتے ہیں اگر اس code کو concurrently execute کریں گے تو problems آئیں گی results جو ہوسکتے آپ کے سامنے سائینا آئے تو اس کو ایک وقت میں ایک ہی process execute کر سکتے ہیں critical section کے اندر ایک وقت میں صرف ایک ہی thread انٹر ہو سکتی ہے اور باکی threads وہ ویٹ کریں گے جب تک پریویس thread نکل نہیں آتی critical section میں سے مزید سبسکوانٹ کوئی بھی thread اپنے critical section کے اندر انٹر نہیں ہو سکتے ہیں تو یہ ایک main principle ہے about critical section آپ critical section کیلئے ایک object provide کرتا ہے operating system windows آپ اس object کو use کر کے this is the mutual exclusion can enforce this this is a simple locking system critical section the object for windows it supports a simple locking system which can solve your critical section problem the object for critical section you can initialize it you can delete it اور اس object کا کوئی handle نہیں ہے اس object میں جو نئی چیز ہے یہ ہے کہ اس کا کوئی handle نہیں ہے جس جو بھی اس object کو own کرتا ہوگا وہ critical section کے اندر انٹر ہو سکے گا اور جو own نہیں کرتے وہ اس لیے ویٹ کریں گے جب ان کی باری آئے گی تبھی وہ اپنے critical section میں انٹر ہو سکیں گے تو handle نہیں ہے یہ مختلف process کے بیچ میں اس طرح سے شے نہیں ہوگا ایک وقت میں ایک ہی تھرٹ جو ہے وہ critical section کو own کر سکتی ہے multiple threads جو ہے وہ critical section کو own نہیں کر سکتی ہے لیکن multiple threads اس جو پر wait کر سکتی ہے پھر جو ایسی threads ہے جو کہ critical section کے لیے wait کر رہی ہے ان کا جو sequence ہے کہ کس order کے اندر کس کو critical section ملے گا اور کس کو نہیں ملے گا تو determine کرنا بھی possible نہیں ہے وہ deterministک نہیں ہے وہ کوئی بھی order ہو سکتا ہے وہ at runtime ہی determine ہوگا نکس process کون ہوگا جو critical section کو acquire کر سکتی ہے ایک وقت میں critical section کے اندر ایک ہی process ہو سکتا لیکن ایک process اپنے critical section میں کئی دفعہ انٹر کرنے کی try کر سکتا ہے اگر critical section ایک part of code ہے thread جو ہے ایک جو thread ہے وہ کئی دفعہ اس critical section میں انٹر ہونے کی try کرے گی لیکن ایک وقت میں ایک ہی thread کسی critical section کے اندر موجود ہوگی ایک سے زادہ threads نہیں ہوں گی جو کہ critical section کو execute کر رہی ہے تو اس critical section کو create کرنے کے لیے delete کرنے کے لیے initialize کرنے کے لیے جو functions use ہوتے ہیں ان کو ہم discuss کرتے ہیں پہلہ function ہے initialize critical section اس کے اندر آپ long pointer to critical section critical section آپ کا ایک object ہے windows کا object ہے اور اس کا long pointer ہے وہ pass کریں گے کیونکہ یہ function جو ہے اس کو change کرے گا ایک طرح کا یہ variable parameter reference parameter ہے تو آپ کو یہاں پر long pointer pass کرنا پڑے گا جو critical section کا object ہے آپ reference pass کریں گے اور critical section کو initialize کریں گا اس کو use کرنے سے پہلے آپ نے initialize کرنا اور جب آپ use کرلیں گے جب آپ کی ساری threads ختم ہو جاتی ہیں اور آپ کو critical section کی ضرورت نہیں تو آپ نے ضرور اس کو delete کرنا جس طرح کہ آپ نے تمام objects کے ساتھ دیکھا کہ objects کو create کرتے ہیں اور objects کو delete بھی کرتے ہیں پھر once یہ object create ہو جاتا تو critical section میں enter ہونے سے پہلے آپ جو function call کریں گے وہ enter critical section ہے اور جب بھی ایک thread جلد جلد وہ qua نکلنے کی کوشτεھ کرے گی جو ہی وہ critical section سے ملٹپل پروسسس کے بیچ میں ایک خریٹکل سیکشن جو ہے وہ شیئر نہیں ہوگا لیکن ویدنہ سنگل پروسسس کئی تھریڈز ہو سکتی ہیں ان کئی ساری تھریڈز کو سنکرونائز کرنے کے لیے آپ ایک ہی خریٹکل سیکشن کا استعمال کریں گے یا کسی بھی ایک سپسیفک شیئرڈ ویریوبل کو سنکرونائز کرنے کے لیے آپ ایک سپسیفک خریٹکل سیکشن کا استعمال کریں جب بھی آپ انٹر خریٹکل سیکشن کو اول کریں تو لیو خریٹکل سیکشن کو اول کرنا لازمی ہے اگر لیو خریٹکل سیکشن آپ نہیں کو ل کرتے تو اس صورت میں کیا کرو سکتا ہے ڈیڈڈڈ لاغs اس صورت کے اندر ہو سکتا ہے کہ آپ کا کوئی اور تھریڈ جو ہے وہ کبھی بھی اپنے خریٹکل سیکشن کے اندر انٹر نوہ سکے یہ والی تھریڈ ہمیشہیں خریٹکل سیکشن کے اندر ہے ہر چیز اس کی اسی طرح ایکزیکیوٹ ہو as if کے وہ خریٹکل سیکشن کے اندر ہے اور کوئی دوسری ثرد جو ہے خریٹکل سیکشن کے اندر انٹر ہوئی نا سکے جب بھی انٹر کرنا تو لیو بھی مست کرنا ملٹبل ثرد وہ کیا وہ کال کر سکتی ہے انٹر خریٹکل سیکشن کو لیکن جتنی بھی کال کرتی ہیں ان میں سے صرف ایک اولاظ کی جائے گی ایک اپنے خریٹکل جس کو کے پہلے آپ نے انیشلائز کیا تھا اس اوپیٹ کا آپ ریفرنس پاس کریں گے تو انٹر کریٹکل سیکشن کوال ہوگا اگر یہ کال کامیاب ہو جاتی ہے تو اس کو کریٹکل سیکشن کی انوشف مل جائے گی اتھر بھائیس جو تھریڈا وہ بلوک ہو جائے گی کب تک بلوک رہے گی جب تک بلوک رہ گی جب تک کوئی جو تھریڈ جس کے پاس کریٹکل سیکشن کی انوشف ہے وہ ڈیوٹ کریٹکل سیکشن کی کال کرتی لیو ایک یہاں کا سیگerry سیکٹنگٹگوڑا OneThread留و السیکٹنگٹنگے کےome میں اievingسار کے لئے جام پہلے میں آگا یاس تاقش سیکٹیüre میں اester政治 cling بے اس کے ج Clement Shev 2 ہے تو وہ critical section کی اندر ہو گی ان کو کہتے ہیں recursive call windows critical section object کیلیے جو recursive calls ہے وہ support کرتی ہے اس لئے support کرتی ہے تاکہ آپ recursively recursive call کو use کر سکیں threats کے اندر اگر ایک function کے اندر enter critical section ہو رہا ہے تو اس function کو آپ recursively call کریں تو پھر کئی دفعہ enter critical section ہو گا لیکن یہ یاد رکھیں جتنی دفعہ انٹر کریٹکل سیکشن ہوئے اُتنی دفعہ یہ آپ کو لیف کریٹکل سیکشن کرنا لازمی اگر نہیں کریں گے تو وہی دیڈلوک والا مسئلہ سامنے آئے گا تو مچ کرنا چاہی ایکزیکلی جتنی دفعہ انٹر ہوئے اگر ایک تھرٹ دو دفعہ اس نے انٹر کال کیا کریٹکل سیکشن کے اندر یا تین دفعہ کال کیا تو اس کو تین دفعہ ہی لیف کریٹکل سیکشن کو کال کرنا بلکل مچنگ امانٹ کے اندر اس کو لیف کریٹکل سیکشن کو کال کرے پڑے گا اور دوسرا مقصد اس کا یہ ہے کے تھرٹ سیف لیبریری شیرڈ لیبریریز ہوتی ہم نے پہلے جس طرح نے دسکس کیا تھا دیللز ہوتی ہیں شیرڈ تو اس کے اندر بھی کریٹکل سیکشن ہو سکتا ہے تو اگر آپ ایک تھرٹ کے اندر لیبریری فنکشن کال کریں اور لیبریری فنکشن آگے پھر سے کریٹکل سیکشن کو اون کرنے کی کوشش کر رہا ہے تو وہ پھر انٹر کریٹکل سیکشن کال کرے گا تو اس چیز کو سپورڈ کرنے کے لیے ریکرسیف انٹر کریٹکل سیکشن کی کال جو ہے وہ بندوز سپورٹ کرتا ہوں انٹر کریٹکل سیکشن پر کوئی ٹائم آوت نہیں اگر ایک تھرٹ جو ہے انٹر کریٹکل سیکشن کال کر کے کریٹکل سیکشن کے اندر انٹر ہوئے اب وہ کافی دیر تک چلتا جا رہا ہے چلتا جا رہا ہے اور لیب نہیں کرا تو کوئی ایسا طریقہ نہیں گیا اس سے کریٹکل سیکشن کو چھوڑوائے لے رہا سکے کوئی ٹائم آوت میکنیزم نہیں گزست کرتا اور دس آبجیک تو اس کے اندر آپ دیکھ سکتے ہیں کہ یہ ایک اس کا ہمیں دیس اڈوانٹیج ندر آ رہا ہے آگے چلکے دیکھیں گے سرٹن ایسے آبجیکس ہیں جس میں یہ دیس اڈوانٹیج ختم ہو جاتا ہے ایک اور دیس اڈوانٹیج ہم نے یہ دیکھا کہ کریٹکل سیکشن جو ہے وہ صرف ایک ہی پروسس کے اندر use ہو سکتا among number of parts پروسسس اس دفرین پروسسس کے بیچ میں یہ use نہیں ہو سکتا تو میچنگ لیب کریٹکل سیکشن کال کرنا جو ہے that is very important اگر نہیں کال کریں گے تو وہ پسا رہے گا وہاں پر اس کے لعا یہ بھی ہو سکتا ہے کہ اگر آپ کریٹکل سیکشن کے اندر انٹر ہونے سے پہلے آپ پول کر کے دیکھیں کہ already کریٹکل سیکشن اس تھریڈ نے ایکوائر تو نہیں کیا ہوا تو اس کے لیے بھی سیٹن فنکشن اویلے بلہا اس کے لیے ہمارے پس فنکشن اویلے بلہا ہے try انٹر کریٹکل سیکشن آپ اس فنکشن کو کال کر کے کریٹکل سیکشن کا ریفرنس پاس کریں گے اگر یہ true ریٹن کرتا ہے تو اس کا مطلب ہے کہ جو کرنٹ تھریڈ ہے وہ already کریٹکل سیکشن کو اون کرتی ہے اگر false ریٹن کرتا ہے تو اس کا مطلب ہے کہ کریٹکل سیکشن اس وقت کسی اور پرٹ کے پاس ہے تو کریٹکل سیکشن جو تھا یہ آپ کے use a space کے اندر دفعند ہوتا اور یہ کریٹکل سیکشن کے اوپر نہیں دفعند ہوتا تو اس چیز کے آپ کے پاس کالنے کے performance advantages آپ کے پاس آجاتے ہیں کہ کریٹکل سیکشن کو use کرنے کا یہ ایک advantage ہے کیونکہ یہ use a space کے اندر دفعند ہے use ہو رہا کریٹکل سیکشن در use نہیں ہو رہا