 بسم اللہ الرحمن الرحیم آج ہم موڈیول 153 دیسکس کریں گے. موڈیول 153 ہے about windows synchronization objects. ہم نے کیونکہ previously دیسکس کیا, windows کے اندر مختلف قسم کے ہم نے synchronization objects دیسکس کیا جیسا کہ critical section ہے, mutex ہے, events ہیں, samaphores ہیں. تو ہم ہرے کے comparative ڈیسکس کریں گے ان کے comparative ڈیسکس کے اندر کیا difference ہیں یا similarities ہیں کیا اس کا effect ہو سکتا تو اس کے لیے ایک table ہے ہم اس table پہ چلتے ہیں اس table کے اندر آپ دیکھ سکتے ہیں column wise ہمارے چار objects ہیں critical section, mutex, samaphore and events اور اس کو مختلف properties کے لحاظ سے دیکھتے ہیں first لیے دیکھتے ہیں کہ named ڈین میں سے کون سا تو یہ ہم already ڈیسکس کر چکے ہیں کہ critical section یہ named نہیں ہے اس کے اس میں reference ہوتا, name نہیں ہوتا باقی cases کے اندر mutex, samaphore events کے اندر وہ named آپ name کی وجہ سے اس کو among different processes ڈیسکس کر سکتے ہیں within single process different threads کے بیچ میں critical section تو share ہو سکتا ہے لیکن within different processes share نہیں ہو سکتا accessible from multiple processes تو یہ critical section نہیں ہے multiple processes کے بیچ میں share نہیں ہو سکتا کیونکہ اس کا reference ہے so critical section آپ کے پاس reference ہے وہ reference valid ہوگا for a specific process اس پروسس کی تمام threads کے لیے relevant ہوگا لیکن اسی دوسرے process کے اندر وہ اس طریق سے use نہیں ہو سکتا جبکہ mutex named ہیں, samaphores named ہیں, events named ہیں تو اس name کے through our different processes کے اندر ان کا استعمال کر سکیں گے جو synchronization constructs use ہوتے صرف critical section کے لیے a different construct ہے اس کے لیے enter critical section ہوتا ہے اور leave critical section ہوتا ہے جبکہ باقی تینوں جو ہمارے objects ہیں mutex samaphore event اس کے لیے آپ نے دیکھا ہے wait for single object یا wait for multiple object کو آپ استعمال کر سکتے ہیں جو ہمارے پاس wait construct ہے اس کا use کر سکتے ہیں mutex ساتھ بھی samaphore کے ساتھ بھی event کے ساتھ بھی اور release کرنے کے لیے یا signal کرنے کے لیے leave critical section دے a different construct use ہوتا ہے جبکہ mutex samaphore event کے لیے same construct use ہوتا ہے release کا construct ہے وہی use ہوتا ہے اور پھر ہم نے یہ بھی دیکھا ہے کہ اگر mutex جو ہے abandon ہو جاتی ہے جس process نے mutex کو acquire کیا ہوا ہے own کیا ہوا ہے وہ process کسی وجہ سے terminate ہو جاتا ہے اسی programming error کی وجہ سے terminate ہو جاتا ہے mutex abandon ہو جاتی ہے تو وہ automatically release ہو جاتا ہے samaphore کا advantage یہ ہے کہ کوئی بھی thread جو ہے samaphore کو release کر سکتے ہیں اور event کی case کے اندر ہم نے دیکھا ہے کہ مختلف ہمارے پاس permutations ہیں combinations ہیں اور جب ایک event کو ہم نے set کیا ہے تو بعد میں اس کو reset بھی کرنا پڑتا ہے pulse کی case میں ایک pulse generate ہوتی اس pulse میں جو بھی thread گزرگی گزرگی یا پھر آپ جب اس کو set کرتے ہیں تو auto reset ہے تو وہ automatically reset ہو جاتا ہے تو ہر object کے اندر آپ دیکھ سکتے ہیں کہ کوئی نہ کوئی difference ہے کوئی نہ کوئی ایک ایسا mechanism ہے جو کہ ہمیں کسی طرح سے benefit کر رہا ہے کونسی situation کے اندر کونسا mechanism use کرنا ہے یہ experience کے ساتھ ساتھی آپ کو intuitively پتہ لگتا جائے گا کہ اس situation کے اندر کونسا mechanism جو ہے وہ most suitable ہے generic ہے ownership جو critical section ہے اس کی ownership جو ہوتی ہے وہ ایک وقت میں of course ایک thread کے پاس ہوتی ہے جس thread کے پاس ownership ہے وہ multiple times وہ اپنے critical section کے اندر انٹر ہو سکتا mutex کی بھی ownership جو ہے وہ ایک وقت میں ایک ہی thread کے پاس ہوتی ہے اور multiple times وہ اس کے پر ویٹ کر سکتا ہے جتی مرزی دفعہ ویٹ کرے without blocking same for کی جو ownership ہے وہ کئی threads کے پاس ہوتی ہے ایک وقت میں لیکن پھر بھی اس کا ایک maximum count ہمیں set کرنا پڑتا ہے وہ ہم نے جس طرح دیکھا تھا مختلف situations کے اندر اگر آپ کے پاس multiple resources of same type تو پھر آپ کو اس کے according لی پھر اس کا count جو ہے وہ set کرنا پڑتا ہے اور event کے case کے اندر کوئی بھی thread جو ہے وہ set event generate کر سکتی ہے جب بھی set اور event ہوگا تو ویٹنگ thread جو وہ release ہو جائیں گی effect of release دیکھتے جب بھی critical section leave critical section کو call کرتے تو جو بھی ایک waiting thread ہوگی وہ waiting thread جو ہے release ہو جائے گی کون سی release ہوگی وہ basically operating system کے پر تپنٹ کرتا اس کی policies کے پر تپنٹ کرتا ہے اور کئی ساری threads waiting ہے تو ان میں سے کوئی ایک thread اس کی policy کے according لی enter ہو سکی گی mutex کو جب آپ release کرتے ہیں تو اس کے اندر بھی اسی طرحیں ہیں کوئی بھی ایک waiting thread جو ہے وہ ownership گین کرے گی اور release ہو جائے گی اور اپنے critical section کے اندر enter ہو سکے گی some of or کی case کے اندر depending upon the count multiple threads بھی release ہو سکتی ہیں اور جو بھی اس کا release count ہے اس کے پر تپنٹ کرتا اور number of resources جو ہے وہ بھی of course release count کی اسی number of resources کی بھی اس کے پر release count جو ہے وہ set کے جاتا تو basically release count کے پر تپنٹ کرتے بھی multiple threads جو ہے وہ release ہو سکتی ہیں events کی case میں میں نے دیکھا ہے کہ جیسے auto event ہوتے ہیں تو اس case میں ایک thread ہے وہ release ہوتی ہے یا اگر manual ہوتا تو اس case کے اندر multiple threads جو ہے وہ بھی release ہو سکتی ہیں تو اس case میں یا تو ایک ہو گی یا پھر multiple threads جو ہے وہ release ہوں گی