जावा और उसके उपयोग में सेमाफोर क्या है?



एक सेमाफोर का उपयोग प्रक्रियाओं के सिंक्रनाइज़ेशन के लिए किया जाता है। यह ब्लॉग आपको जावा में विभिन्न प्रकारों और सेमाफोरों के कार्यान्वयन से गुजरेगा।

में एक सेमाफोर एक काउंटर के माध्यम से एक साझा संसाधन तक पहुंच को नियंत्रित करता है। यह है एक धागा सिंक्रनाइज़ेशन निर्माण का उपयोग थ्रेड्स के बीच संकेतों को भेजने से चूक गए संकेतों से बचने या एक महत्वपूर्ण अनुभाग की रक्षा करने के लिए किया जाता है। जावा में सेमफोरस पर इस ब्लॉग में, हम अवधारणा को विस्तार से समझेंगे।
इस ब्लॉग में निम्नलिखित विषयों को शामिल किया जाएगा:

जावा में सेमाफोर क्या है?

एक सेमाफोर एक चर है जिसका उपयोग प्रक्रियाओं के सिंक्रनाइज़ेशन के लिए किया जाता है जो समवर्ती प्रक्रियाओं के प्रबंधन के लिए उपयोग किया जाता है। इसका उपयोग कई समवर्ती प्रक्रियाओं द्वारा एक सामान्य संसाधन तक पहुंच को नियंत्रित करने और दौड़ की स्थिति से बचने के लिए भी किया जाता है।





सेमाफोर के प्रकार -

  • बाइनरी सेमाफोर: एक बाइनरी सेमाफोर केवल 0 और 1 को मूल्यों के रूप में लेता है और इसका उपयोग पारस्परिक बहिष्करण को लागू करने के साथ-साथ समवर्ती प्रक्रियाओं को सिंक्रनाइज़ करने के लिए किया जाता है।

  • गणना सेमाफोर: किसी भी बिंदु पर एक गिनती के सेमाफोर का मान अधिकतम प्रक्रियाओं को इंगित करता है जो महत्वपूर्ण अनुभाग में एक ही समय में प्रवेश कर सकते हैं।



सेमाफोर का कार्य

  • यदि सेमाफोर गिनती> 0, तो धागा एक परमिट प्राप्त करता है, जो सेमाफोर की गिनती को घटाता है।

  • और, तब तक अवरुद्ध है जब तक कि परमिट प्राप्त नहीं किया जा सकता है।

    हैशमैप और हैशटेबल के बीच अंतर करें
  • जब थ्रेड को साझा संसाधन तक पहुंचने की आवश्यकता नहीं होती है, तो यह परमिट जारी करता है, जो सेमीफोर काउंट को बढ़ाता है।



  • यदि एक और धागा परमिट के लिए इंतजार कर रहा है, तो उस समय एक धागा परमिट प्राप्त करेगा।

सेमाफोर का कार्यान्वयन

आयात java.util.concurrent। * // साझा संसाधन वर्ग संसाधन के रूप में संसाधन ले जाएगा {स्थैतिक int count = 0} वर्ग MyDemo डेमो का विस्तार करता है {Semaphore sem स्ट्रिंग stringName public MyDemo (सेमीफोर सेम, स्ट्रिंग धागा नाम) {सुपर (थ्रेडनाम) यह। sem = sem this.threadName = threadName} @Override public void run () {// Run by X if (this.getName ()। बराबर ('X')) {System.out.println ('शुरू' + threadName) कोशिश करें {// साझा संसाधन System.out.println (थ्रेडनेम + 'परमिट के इंतजार में) को एक्सेस करने की अनुमति मिलेगी। लॉक सेमी.क्वायर () System.out.println (threadName +) प्राप्त करने के लिए परमिट प्राप्त होता है। । ') // अब, साझा संसाधन तक पहुँच और बाकी मैं इंतजार करूँगा (int 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) } } 

आउटपुट-
एक्स शुरू कर रहा है
Y शुरू कर रहा है
एक्स परमिट के लिए इंतजार कर रहा है
Y एक परमिट की प्रतीक्षा कर रहा है
एक्स: 1
एक्स: 2
एक्स: 3
एक्स: 4
एक्स: 5
एक्स: 6
एक्स: 7
X परमिट जारी करता है
Y को परमिट मिलता है
य: ६
य: ५
य: ४
य: ३
य: २
य: १
य: ०
और परमिट जारी करता है
गिनती: ०

इसके साथ, हम 'जावा में सेमीफोरर्स' पर इस ब्लॉग के अंत में आते हैं। यदि आप जावा के बारे में अधिक जानना चाहते हैं, तो देखें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का का जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किया गया है जो जावा डेवलपर बनना चाहते हैं। पाठ्यक्रम आपको जावा प्रोग्रामिंग में एक सिर शुरू करने के लिए डिज़ाइन किया गया है और आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करता है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इसे 'जावा में सेमाफोर क्या है' टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।