सेमाफोर वर्ग आपको उन थ्रेड्स की संख्या पर एक सीमा निर्धारित करने देता है जिनकी एक महत्वपूर्ण खंड तक पहुंच है। संसाधनों के पूल तक पहुंच को नियंत्रित करने के लिए कक्षा का उपयोग किया जाता है। System.Threading.Semaphore सेमाफोर के लिए नाम स्थान है क्योंकि इसमें सेमाफोर को लागू करने के लिए आवश्यक सभी विधियां और गुण हैं।
सी # में सेमाफोर का उपयोग करने के लिए, आपको केवल सेमाफोर ऑब्जेक्ट के इंस्टेंस को तुरंत चालू करने की आवश्यकता है। इसके कम से कम दो तर्क हैं -
संदर्भ
-
एमएसडीएन
<टेबल> <थहेड>प्रविष्टियों की प्रारंभिक संख्या और समवर्ती प्रविष्टियों की अधिकतम संख्या निर्दिष्ट करते हुए, सेमाफोर वर्ग का एक नया उदाहरण प्रारंभ करता है।
सेमाफोर वर्ग का एक नया उदाहरण आरंभ करता है, प्रविष्टियों की प्रारंभिक संख्या और समवर्ती प्रविष्टियों की अधिकतम संख्या निर्दिष्ट करता है, और वैकल्पिक रूप से सिस्टम सेमाफोर ऑब्जेक्ट का नाम निर्दिष्ट करता है।
सेमाफोर वर्ग का एक नया उदाहरण आरंभ करता है, प्रविष्टियों की प्रारंभिक संख्या और समवर्ती प्रविष्टियों की अधिकतम संख्या निर्दिष्ट करता है, वैकल्पिक रूप से सिस्टम सेमाफोर ऑब्जेक्ट का नाम निर्दिष्ट करता है, और एक वैरिएबल निर्दिष्ट करता है जो एक मूल्य प्राप्त करता है जो दर्शाता है कि एक नया सिस्टम सेमाफोर बनाया गया था या नहीं।
आइए अब एक उदाहरण देखें:
यहां, हमने निम्नलिखित सेमाफोर कंस्ट्रक्टर का उपयोग किया है जो सेमाफोर क्लास के एक नए इंस्टेंस को इनिशियलाइज़ करता है, समवर्ती प्रविष्टियों की अधिकतम संख्या निर्दिष्ट करता है और वैकल्पिक रूप से कुछ प्रविष्टियों को आरक्षित करता है।
static Semaphore semaphore = new Semaphore(2, 2);
उदाहरण
using System; using System.Threading; namespace Program { class Demo { static Thread[] t = new Thread[5]; static Semaphore semaphore = new Semaphore(2, 2); static void DoSomething() { Console.WriteLine("{0} = waiting", Thread.CurrentThread.Name); semaphore.WaitOne(); Console.WriteLine("{0} begins!", Thread.CurrentThread.Name); Thread.Sleep(1000); Console.WriteLine("{0} releasing...", Thread.CurrentThread.Name); semaphore.Release(); } static void Main(string[] args) { for (int j = 0; j < 5; j++) { t[j] = new Thread(DoSomething); t[j].Name = "thread number " + j; t[j].Start(); } Console.Read(); } } }
आउटपुट
निम्न आउटपुट है
thread number 2 = waiting thread number 0 = waiting thread number 3 = waiting thread number 1 = waiting thread number 4 = waiting thread number 2 begins! thread number 1 begins! thread number 2 releasing... thread number 1 releasing... thread number 4 begins! thread number 3 begins! thread number 4 releasing... thread number 0 begins! thread number 3 releasing... thread number 0 releasing...