 بسم اللہ الرحمن الرحیم آج ہاں موڈیول 116 دسکس کریں گے موڈیول 116 ہے ویٹنگ فور تھریڈز اس کے اندر ہم مکنزم دیکھیں گے جس طریقے سے ایک پروسز یا کوئی دوسری تھریڈ جو ہے کسی ایک تھریڈ کے کمپلیٹ ہونے کا ویٹ کر سکتی ہے یعنی کہ ہم کیسے چیک کر سکتے ہیں کہ کوئی ایک سپسفک تھریڈ یا نمبر of تھریڈز جو ہے ان کی ایکسیوشن کمپلیٹ ہوئی ہے یا نہیں ہوئی کیونکہ ایسا کرنے کی ہم ازود پڑے گی جب ہم نے سنکرونیزیشن کرنی ہے ہم چاہتے ہیں کہ ماری ایک تھریڈ یا نمبر of تھریڈز ہیں جب وہ ساری کمپلیٹ ہونگی تو پھر ہی کوئی ایک ایک ایک ایکشن پروفوم ہو جو کساروں کے اوپر دپینڈنٹ ہے ہم اس ایکشن کو اون تھریڈز کے ساتھ سنکرونیز کریں گے کہ تھریڈز کمپلیٹ ہو تو ہم یہ ایکشن پروفوم کریں ہمیں کیا کرنا پڑھے گا ہمیں ہم تھریڈز کو کمپلیٹ ہونے گلیے ویٹ کرنا پڑھے گا ان کو چاس دینا پڑھے گا کہ وہ اپنی ایکشن کمپلیٹ کریں تو ایسا کرنے گلیے بڑی ایک سمپل میکنیزم ہے وندوز کے اندر ایک سمپلس یہ ایپیہ ہے آپ اس کی مدر سے یہ چک کر سکتے ہیں کہ جی تھریڈز جوہیں ان کی کمپلیٹشن ہوئی ہے یا نہیں ہوئی ہے اور ویٹ کر سکتے ہیں آپ کے پوگرام کی ایکشن کو روک سکتے ہیں اس point کے اوپر یا کسی دوسی تھریڈ کی ایکشن کو روک سکتے ہیں ایک سپیسفیک point کے اوپر اور وہ ایکشن تب تک of course continue کرے گی جب تک جو آپ تھریڈز چاہتے ہیں ان کی ایکشن کمپلیٹ نہیں ہو جاتی جو سنکرونیزیشن ہے یہ ہم کیسے کرتے ہیں اس کے لیے ہمارے پا سمپل دو functions available ہیں ایک ہے wait for single object اور دوسرہ ہے wait for multiple objects تھریڈ آپ کو پتا ہے وندوز جو ہے تھریڈ کو کیس طرح سے تریٹ کرتی ہے as an object تریٹ کرتی ہے تو یہ جو function ہے یہ ایک generalize function ہے اس کے اندر object جو ہے وہ تھریڈ بھی ہو سکتی ہے processes بھی ہو سکتے ہیں کوئی اور چیز بھی ہو سکتی ہے اور کئی سارے مختلف کسم کے objects بھی ہو سکتے ہیں یعنی کہ ہیٹرو جینیس objects ہو سکتے ہیں ان کا mix ہم use کر سکتے ہیں کچھ processes بھی بیچ میں ڈالنے کچھ ہم threads بھی بیچ میں ڈالنے مختلف کسم کے ہم objects اس کے اندر use کر سکتے ہیں ضروری نہیں ہوتا کہ ایکی طرح کا object ہونا چاہی ہے تو یہ بھی اس کا ایک advantage ہے windows کا کیونکہ وہ ہر چیز کو as in object تریٹ کر رہی ہے wait for single object کبھی use ہوگا جب آپ ایک کسی single thread یا single process کے لیے wait کریں اگر number of processes کے لیے wait کر رہے ہیں تو آپ کو objects کی array بنانی پڑے گی اور پھر اس کے اس کے اندر جو آپ wait کرنکلی API use کریں گے that is wait for multiple objects wait for multiple objects کے اندر آپ کتنے objects جو ہیں ان کے لیے wait کر سکتے ہیں اس کی ایک limit windows کے اندر define ہوئی بھی ہے maximum wait objects یعنی کہ آپ wait for multiple objects کے اندر maximum اتنے objects جو ہیں specify کر سکتے ہیں عام طور پہ یہ value عقصر systems کے اندر آپ کو 64 ملے گی تو ایک وقت میں آپ اس function کو call کر کے 64 مختلف objects کی execution کا wait کر سکتے ہیں کیونکہ execution complete ہو تو پھر آگے execution جو ہے وہ resume ہوگی تب تک execution blocked رہ گی اگر 64 سے زادہ بھی objects ہیں آپ کے پاس اگر سے for example آپ کے پاس 100 objects ہیں تو آپ کیا کریں گے آپ ایک array بنائیں گے 64 کی اور باقی جو 36 رہے گے اس کی ایک اور array بنائیں گے اور آپ دو دفعہ wait for multiple objects کو call کرنے گے ایک ان 64 objects کے ساتھ اور دوسی دفعہ 36 objects کے ساتھ اس طرح سے آپ 100 objects کے لیے wait کر سکتے ہیں اسی طرح آپ ملٹپل call کر کے 200 objects کے لیے بھی 500 objects جتنے بھی objects ہیں ان کے لیے wait کرنا چاہیں آپ wait کر سکتے ہیں تو multiple calls آپ کو use کرنے پڑھیں گی اچھا اب جو objects ہیں وہ کیا ہیں thread ہیں یا processes ہیں first کریں ابھی ہم thread تک limited رہتے ہیں تو thread کے جب execution complete ہو جاتی ہے تو اس کی signalling ہوتی ہے signalling کا مطلب یہ نہیں ہے کہ اس کا handle ختم ہو گیا جس اس کی execution ختم ہوئی ہے لیکن handle کے اندر اس کی کچھ information پھر بھی باقی رہتی ہے جب signal کیسے ہوتا ہے یا تو بیسے اپنی execution complete کر لے یا پھر exit thread call ہو جا ہے یا پھر terminate thread call ہو جا ہے تو اس کس کے اندر جو object ہے object کے اندر اس کا status آ جائے گا اور object جو ہم کہیں گے کہ signal ہو گیا جب object signal ہو جائے گا تو wait for multiple objects جو ہے اس کو پتہ لگ جائے گا جی object signal ہو گیا اور اس پہ اس کی وہاں پہ جو blockے ختم ہو سکتی ہے execution آگے کو continue ہو سکتی ہے ایسی صورتحال میں جب بھی ایک کوئی کہہ لیں کے thread وہ signal ہوتی ہے تو اس کے اس کے اندر جتنے بھی objects ہیں جو کہ اس thread کیلئے wait کہا رہے ہیں وہ سارے objects جو ہیں release ہو جاتے ہیں وہ اس point پہ جتنے بھی objects اس thread کے ساتھ associated تھے وہ سارے objects جو ہیں release ہو جاتے ہیں ایک thread جو once signal ہو گیا وہ دبارہ non signal نہیں ہو سکتی کسی صورت non signal نہیں ہو سکتی ہم آپ اس کو destroy کر سکتے ہیں close handle کرتے جائے اور آپ اس کو destroy کر دیں لیکن پھر سے وہ non signal state کے اندر نہیں جا سکتی کسی صورت بھی نہیں جا سکتی بالکل اسی طرح پہلے بھی ہم نے ہم نے point شہد processes کے case میں discuss کیا ہوگا جس طرح exit thread سے آپ signal state کے اندر جا رہے ہیں thread آپ کی signal state کے اندر جا رہے ہیں اسی طرح سے ہی exit process سے process جو ہے وہ signal state کے اندر جلا جاتا ہے تو ایک process گیا ایک thread جو ہے صرف once signal state کے اندر جا سکتی ہے اور اس کے بعد واپس non signal نہیں ہو سکتی