 اسم اللہ الرحمن الرحیم آج ہم موڈول 138 دسکس کریں گے موڈول 138 ہے about Thread Synchronization Objects مختلف قسم کے سنکرونائیزیشن objects ہے جوکہ windows support کرتی ہے آپ ان کو اپنے پوگرام میں use کر سکتے ہیں to enforce synchronization to enforce mutual exclusion ہم یہی دیکھیں گے ہے کہ آپ کے پاس کیا کیا options available ہیں کون کون سے objects ہے جوکہ windows کے اندر available ہیں جن کو کیا آپ use کر سکتے ہیں اور آگے آنے والے کئی پوگرامز کے اندر ہم ان کو use بھی کریں گے پسلی ہم نے previously کچھے functions دسکس کیا تھے جس میں ایک function تھا wait for single object اور ایک wait for multiple object تو یہ ایک object کے اوپر wait کرنے کے لیے استمال ہوتا یعنی کہ آپ کو a synchronization object ہے اس synchronization object کی مذہ سے آپ synchronization enforce کر رہے ہیں اور جب تک وہ object allow نہیں کرتا آپ اپنی execution آگے continue کریں تو آپ کیا کرتے ہیں آپ اس کے اوپر wait کرتے ہیں تو wait for single object ایک SPECIFIC object کیلئے wait کرے گا wait for multiple objects وہ کئی سارے objects کے اوپر wait کر سکتا اب question یہ ہے کہ یہ objects کون کون سے ہیں ان میں سے کچھ previously objects جو ہیں وہ آپ نے use کیا جسے کہ file locks تھے file locks کی مدل سے ہم جو اگر کوئی multiple processes ہیں جو کہ ایکی file کو access کرنے کی کوشش کرتے ہیں تو ہم file locks کی مدل سے اون processes کو wait کرا سکتے ہیں وہ بھی آپ کے اسی طرح کی synchronization objects ہیں اس کے لیوہ آگے چل کے ہم کئی سارے objects discuss کریں گے جو 4 main objects ہیں windows کے اندر وہ mutexes ہیں semaphores ہیں events ہیں اور critical section ہیں جب بھی آپ ان objects کو use کرتے ہیں تو ان کو بڑا carefully use کرنا پڑتا ہے ان کے ایک تو use سے ایک طرح کہ یہ compromise ہوتا ہے جب بھی آپ ان کو use کرتے ہیں تو آپ of course performance کے لحاظ سے compromise کرتے ہیں performance جو ہے ان objects کے استعمال سے جس طرح ہم نے memory barriers کی case میں بھی دیکھا تھا کہ performance جو ہے وہ reduce ہو جاتی ہے volatile جو امارے variables اس کے case میں بھی ہم نے دیکھا تھا کہ performance جو ہے reduce ہو جاتی ہے تو ان objects کے استعمال سے بھی performance reduce ہو جاتی ہے لیکن صرف performance کو ہی enhance کرنا ہمارا object نہیں ہے سب سے جو important object ہوتا ہے کسی بھی computational model کا وہ یہ ہوتا ہے کہ آپ کے results جو ہے وہ accurate ہیں اگر بڑا ہی performance آپ انکریز کر لیتے ہیں لیکن آپ کے results کبھی بھی accurate نہیں آتے تو ایسے model کا کوئی فہدان پرس لی آپ کے پاس results سے ہی آنے چاہی ہیں بعد میں بھی ہم دیکھتے ہیں کہ جس کو مزید performance کو کہاں پے enhance کیا جا سکتا ہے اگر کوئی ایسی performance enhancement ہے جس سے کہ آپ کا results جو ہے وہ accurate نہیں آسکتا تو ایسی performance enhancement جو ہوتی ہے اس کو ہم discard کرتے ہیں اس کی ہمیں ضرورت نہیں ہے first of all آپ کا results جو ہے وہ بالکل accurate ہونا چاہیے تو جب بھی آپ ان کو use کرتے ہیں یہ ایک آپ کو بیچ میں ایک incumbrance نظر آتی ہے کہ جو آپ کی performance ہے وہ degrade ہو جائے گی اور اگر آپ ان کو غل تریکہ سے use کر سکتے ہیں کرتے ہیں تو ایک اور چیز بھی ہوتی ہے جس کو آپ well aware ہوں گے ان کو کہتے ہیں deadlocks اگر ان objects کو آپ صحیح تریکہ سے نہیں استعمال کرتے ہیں then can even lead to deadlocks تو جب بھی ان کو استعمال کریں بڑا carefully استعمال کرنا پڑتا ہے ان کو پہلے of course understand کرنا ان کو study کریں اور پھر اس کی جو صحیح use ہے اس کے according لی ان کو استعمال کریں اگر آپ ان کو study کرتے ہیں بغیر ہی well تریکہ سے use کرتے ہیں تو you can end up in a deadlock اس کے لوہ اور بھی کئی کچھ synchronization objects ہیں ایک srw logs ہیں اور ایک condition variables ہیں یہ بھی windows کے اندر support کیا جاتے ہیں اور اس کے لوہ اور کچھ advanced synchronization objects بھی ہیں جن کو waitable timers اور IO completion supports کیا ہوتا آگے چل کے جونیو آگے چلتے جائیں گے اور مزید synchronization کے پر بات کرتے جائیں گے تو in objects کو بھی ہم Discuss کریں