ایک سیمفور ان کسی کاؤنٹر کے ذریعہ مشترکہ وسائل تک رسائی کو کنٹرول کرتا ہے۔ یہ ایک ہے تھریڈ ہم وقت سازی مس اشاروں سے بچنے یا کسی اہم حصے کی حفاظت کے لئے دھاگوں کے مابین سگنل بھیجنے کے لئے استعمال کیا جائے۔ جاوا میں سیمفورس پر اس بلاگ میں ، ہم اس تصور کو تفصیل سے سمجھیں گے۔
اس بلاگ میں درج ذیل موضوعات کا احاطہ کیا جائے گا:
جاوا میں سیمفور کیا ہے؟
سیمافور ایک متغیر ہے جو عمل کے ہم وقت سازی کے لئے استعمال ہوتا ہے جو ہم وقتی عمل کے نظم و نسق کے لئے استعمال ہوتا ہے۔ یہ متعدد ہم آہنگی عملوں کے ذریعہ عام وسائل تک رسائی پر قابو پانے اور ریس ریس کی حالت سے بچنے کے لئے بھی استعمال ہوتا ہے۔
سیمفور کی اقسام -
ثنائی سیمفور: ایک بائنری سیمفور صرف 0 اور 1 کو اقدار کے طور پر لیتا ہے اور باہمی خارج کو نافذ کرنے کے ساتھ ساتھ ہم آہنگی کے عمل کو ہم وقت سازی کے لئے استعمال ہوتا ہے۔
سیمفور کی گنتی: کسی بھی مقام پر گنتی والے سیمفور کی قدر زیادہ سے زیادہ عمل کی نشاندہی کرتی ہے جو عین وقت میں ایک اہم حصے میں داخل ہوسکتی ہے۔
سیمفور کا کام کرنا
اگر سیمفور کی گنتی> 0 ، دھاگے سیمیفور کی گنتی کو کم کرتے ہوئے ، اجازت نامہ حاصل کرتے ہیں۔
ورنہ ، جب تک اجازت نامہ نہیں لیا جاسکتا تب تک اسے مسدود کردیا جاتا ہے۔
جب تھریڈ کو اب مشترکہ وسائل تک رسائی کی ضرورت نہیں ہوتی ہے تو ، یہ سیمفور کی گنتی میں اضافہ کرتے ہوئے ، اجازت جاری کرتا ہے۔
ازگر ڈیف __init __ (خود)
اگر دوسرا تھریڈ اجازت کے منتظر ہے تو ، اس وقت یہ تھریڈ اجازت نامہ حاصل کرے گا۔
سیمفور کا نفاذ
درآمد java.util.concurrent. * // ریسورس کو بطور مشترکہ کلاس کلاس ریسورس لیں گے {جامد INT گنتی = 0} کلاس MyDemo ڈیمو {سیمفور سیم اسٹرنگ تھریڈ نام پبلک مائیڈیمو (سیمفور سیم ، اسٹرنگ تھریڈ نام) {سپر (تھریڈ نیم) اس کو۔ sem = sem this.threadName = threadName} @ اوور رائڈ پبلک باطل رن () {// ایکس باؤ ایکس چلائیں اگر (this.getName (). برابر ('X')). System.out.println ('شروعات' + تھریڈنیام) کوشش کریں {// مشترکہ وسائل تک رسائی حاصل کرنے کا اجازت نامہ ملے گا System.out.println (threadName + 'اجازت نامے کا انتظار کر رہا ہے۔') // لاک sem.acquire () System.out.println کے حصول (تھریڈ نام + 'کو اجازت نامہ ملتا ہے . ') // اب ، مشترکہ وسائل تک رسائی حاصل کرنا اور باقی (IN i = 0 i) کا انتظار کریں گے<7 i++) { Resource.count++ System.out.println(threadName + ': ' + Resouce.count) // Now thread Y will try to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } // run by thread Y else { System.out.println('Starting ' + threadName) try { // First, Y will try to get permit System.out.println(threadName + ' waiting for a permit.') // acquiring the lock sem.acquire() System.out.println(threadName + ' gets a permit.') // Now, accessing the shared resource and others will wait for(int i=0 i < 7 i++) { Resource.count-- System.out.println(threadName + ': ' + Resource.count) // Now, allowing a context switch -- if possible. // for thread X to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } } } public class SemTest { public static void main(String args[]) throws InterruptedException { // creating a Semaphore object // with number of permits 1 Semaphore sem = new Semaphore(1) // creating two threads with name X and Y // Here thread X will increment and Y will decrement the counter MyDemo md1 = new MyDemo(sem, 'X') MyDemo md2 = new MyDemo(sem, 'Y') // stating threads X and Y md1.start() md2.start() // waiting for threads X and Y md1.join() mtd.join() System.out.println('count: ' + Resource.count) } }
آؤٹ پٹ-
X شروع ہو رہا ہے
شروع Y
ایکس اجازت نامے کا انتظار کر رہا ہے
Y اجازت نامے کا انتظار کر رہا ہے
ایکس: 1
ایکس: 2
ایکس: 3
ایکس: 4
X: 5
X: 6
ایکس: 7
ایکس اجازت نامہ جاری کرتا ہے
Y کو اجازت مل جاتی ہے
Y: 6
Y: 5
Y: 4
Y: 3
Y: 2
Y: 1
Y: 0
اور اجازت نامہ جاری کرتا ہے
گنتی: 0
اس کے ساتھ ، ہم 'جاوا میں سیمفورس' پر اس بلاگ کا اختتام کرتے ہیں۔ اگر آپ جاوا کے بارے میں مزید معلومات حاصل کرنا چاہتے ہیں تو ، چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کے نیٹ ورک ہیں۔ ایڈورکا کا جاوا J2EE اور SOA ٹریننگ اور سرٹیفیکیشن کورس طلباء اور پیشہ ور افراد کے لئے ڈیزائن کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔ کورس آپ کو جاوا پروگرامنگ میں آغاز فراہم کرنے اور ہائبرنیٹ اور اسپرنگ جیسے جاوا کے مختلف فریم ورکوں کے ساتھ ساتھ جاوا کے دونوں بنیادی خیالات کے ساتھ تربیت دینے کے لئے ڈیزائن کیا گیا ہے۔
ہمارے لئے ایک سوال ہے؟ برائے کرم اس 'جاوا میں سیمفور کیا ہے' بلاگ کے تبصرے والے حصے میں اس کا ذکر کریں اور ہم جلد از جلد آپ کے پاس واپس آئیں گے۔