 بسم اللہ الرحمن الرحیم، آج ہم موڈیول 112 دیسکرس کریں گے یہ موڈیول ہے about thread management اس کے اندر ہم دیکھیں گے کہ آپ ایک thread کو کریئٹ کرنا چاہتے ہیں کیسے کریئٹ کریں گے اس کے پر جو مختلف آپ اپریشنز پرفوم کرنا چاہتے ہیں اس کے لیے کیا API's available ہیں پرسلی جو threads ہیں جس طرح Windows کے اندر ہر چیز کو as an object تو Windows thread کو بھی as an object ہی treat کرتی ہے جو API use ہوتی ہے thread کو کریئٹ کرنے کے لیے وہ بڑی سیمپل API ہے اس کا نام ہے create thread thread کے کیس کے اندر بھی child اور parent relationship ہوسکتا لیکن operating system اگر اس طرح کا کوئی relationship ہے تو عام طور پر operating system سے unaware ہوتا اب جو create thread کا function ہے اس کو ہم دیکھتے ہیں اس کے اندر مختلف کسم کی parameters ہیں آپ اس create thread کے API کو function کو کیسے use کریں گے پرسلی اس کے اندر آپ پلس کریں گے starting address کس چیز کا starting address thread کا starting address thread کو کیس طرح سے اپنے اپنے program کے اندر یا process کے اندر accommodate کرنے thread جو ہے وہ بسکلی ایک function کی طرح ہی ہوگا ایک function کی طرح ہوگا اور اس function کا جو address ہے وہ آپ نے create thread کے اندر specify کریں گے تو اگر thread as a function implement ہوئی ہے تو اس کے اس کے اندر function کا نام ہوتا ہے وہ اس کا address ہوتا ہے آپ create thread کے اندر function کا نام specify کریں گے جس کو as a thread آپ نے use کرنے پھر اس کے علاوہ ہر thread کہ ہم نے previously discuss کیا تھا کہ ہر thread کی اپنی ایک stack space ہوتی ہے اگر ایک process کے اندر number of threads ہیں تو ہر thread کے اندر اپنی ایک stack space reserve ہوگے اور وہ space جو ہے of course process کی ہی space میں سے آتی ہیں تو آپ نے اس create thread کے ہی function کے اندر API کے اندر specify کرنا ہے کہ thread کے لیے کتنی space اس thread کی stack کے لیے کتنی space جو ہے وہ reserve کی جائے گی اس کے لیے default by default جو memory وہ one MB ہوتی maximum memory that is one MB عام طور پہ جب program start ہوتا ہے تو stack کی لیے or thread start ہوتی ہے تو اس کی stack کی لیے one ایک page جو ہے وہ commit ہوتا ہے اور جون جون stack بھڑتی جاتی ہے grow کرتی جاتی ہے اور pages بھی اس کے اندر add ہوتے جائیں گے پھر اس کے لبہ ایک اور آپ کو argument pass کرنا پڑے گا وہ argument کیا چیز ہے وہ ایک pointer ہوگا وہ pointer کسی بھی structure کا ہوسکتا ہے وہ structure کے اندر کسی بھی طرح کی information ڈاک سکتے ہیں عام دور پہ وہ اس thread کو various parameters required ہوں گے کوئی values required ہوں گے اپنی execution perform کرنے کے لیے اپنے operations perform کرنے کے لیے تو وہ structure کے اندر آپ place کر سکتے ہیں اور as an argument اس کو pass کر سکتے ہیں یہاں پر دیکھتے ہیں create thread کا function اس function کے اندر سب سب پہلہ parameter جو ہے that is the security attribute اس کو ہم پہلے بھی کئی دفعہ discuss کر چکے ہیں اس میں بھی اور otherwise بھی اس کے بعد آپ size t type کا ایک variable ہے وہ specify کریں گے اس کے اندر آپ stack size specify کریں گے stack size آپ کو بتا ہے maximum 1m بھی ہوسکتا پھر اسے جو next parameter وہ بڑے important ہے یہ parameter جو ہے یہاں here lp start address یہ basically thread کا starting address ہے اور thread as اگر function implement ہی بھی ہے تو اس function کا نام ہوگا وہی اس کا address ہوگا جس طرح اس ایک سمپل کے اندر دیکھ سکتے ہیں کہ اگر یہ thread کا prototype ہے آپ کا thread function کے نام کا جانب یہ prototype given ہے تو اس prototype کا جو نام thread function thread func یہ جو ہے یہ ہی use ہوگا as starting address of the thread function اس function کو کیا return کرنا چاہیے ایک double word return کرنا چاہیے اور اس کو parameters کے اندر ایک long pointer to void لینا چاہیے اس طرح کا جو function ہوگا اسی function کے ڈرس کو جو ہے آپ یہاں پے place کر سکتے ہیں next lp thread param ہے یہ بیسیگلی ایک parameter ہے ایک argument ہے جو کہ آپ thread کو pass کر سکتے ہیں یہ ایک pointer ہوگا اس pointer کے اندر کسی structure کا address پڑا ہوگا اور structure کے اندر وہ ساری information ہوگی جو کہ آپ thread کو pass کرنا چاہتے ہیں as an argument تو جتنے بھی argument سے اس کو آپ ایک structure کے اندر ہم طور پر رکھیں گے اور اس structure کا pointer ہے اس کا جو address اس کا reference جو ہے وہ آپ lp thread param کے through thread کو pass کر سکتے ہیں dw create flags اس کے اندر جو thread create ہونی ہے اس کے according لی کچھ information ہوتی ہے اگر یہاں پہ آپ نے flag کی value جو ہے وہ 0 رکھی ہے تو اس کا مطلب ہے thread جو ہی create ہوگی ساتھ اس کی execution start ہو جائے گی اگر آپ نے for example if the value رکھی ہے create suspended تو اس کے اس کے اندر جب thread start ہوگی تو suspended state کے اندر ہوگی execute نہیں کری ہوگی اور اگر آپ چاتے ہیں کہ وہ execute کرے تو اس thread کے اوپر آپ کو resume thread کا operation perform کرنا پڑھا گا resume thread کا function call کرنا پڑھا گا مزید اس کے اندر اور بھی کئی option ہیں وہ آپ مزید ان کی detail msd in کے اندر دیکھ سکتے ہیں پھر یہ بالکل ایک id thread کا id جس طرح سے processes کا id ہوتا ہے اس طرح سے thread کا b id ہوتا ہے جب thread create ہوگی تو اس کو ایک id سائن ہوگا lp thread id is a pointer to a d word ایک double word کا pointer ہوگا اور اس double word کے اندر کیا پڑھا ہوگا thread identifier پڑھا ہوگا ایک value ہوگی جو کہ thread کو uniquely کرنے کے identify کرتی ہے اگر آپ نے یہاں پے null place کیا تو اس صورت کے اندر کوئی بھی identifier جو ہے وہ return نہیں ہوگا اور اگر یہاں پہ نل نہیں place کیا آپ نے یہ pointer place کیا تو اس pointer کے اندر thread کو جو بھی identifier سائن ہوگا وہ identifier place ہو جائے گا