http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
एक सेमाफोर बनाने के लिए, मुझे एक प्रारंभिक गिनती और अधिकतम गिनती प्रदान करने की आवश्यकता है। MSDN बताता है कि एक प्रारंभिक गिनती है -
सेमाफोर के लिए अनुरोधों की प्रारंभिक संख्या जो समवर्ती रूप से दी जा सकती है।
जबकि यह बताता है कि अधिकतम गिनती है
सेमाफोर के लिए अनुरोधों की अधिकतम संख्या जो समवर्ती रूप से दी जा सकती है।
मैं समझ सकता हूं कि अधिकतम गिनती थ्रेड्स की अधिकतम संख्या है जो किसी संसाधन को समवर्ती रूप से एक्सेस कर सकती है। लेकिन, प्रारंभिक गिनती का उपयोग क्या है?
यदि मैं 0 की प्रारंभिक गिनती और 2 की अधिकतम गणना के साथ एक अर्ध-कवच बनाता हूं, तो मेरा कोई भी थ्रेड सूत्र संसाधन तक पहुंचने में सक्षम नहीं है। यदि मैंने प्रारंभिक गणना को 1 और अधिकतम गिनती को 2 के रूप में सेट किया है, तो केवल थ्रेड पूल थ्रेड संसाधन तक पहुंच सकता है। यह केवल तब होता है जब मैं प्रारंभिक गिनती और अधिकतम संख्या दोनों को 2 के रूप में सेट करता हूं, 2 सूत्र समवर्ती रूप से संसाधन तक पहुंचने में सक्षम होते हैं। तो, मैं वास्तव में प्रारंभिक गिनती के महत्व के बारे में उलझन में हूं?
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 2); //all threadpool threads wait
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 2);//only one thread has access to the resource at a time
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2, 2);//two threadpool threads can access the resource concurrently