http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Para crear un semáforo, necesito proporcionar un recuento inicial y un recuento máximo. MSDN indica que un recuento inicial es:
El número inicial de solicitudes para el semáforo que se pueden otorgar al mismo tiempo.
Si bien establece que el recuento máximo es
El número máximo de solicitudes para el semáforo que se pueden otorgar al mismo tiempo.
Puedo entender que el recuento máximo es el número máximo de subprocesos que pueden acceder a un recurso al mismo tiempo. Pero, ¿de qué sirve el recuento inicial?
Si creo un semáforo con un recuento inicial de 0 y un recuento máximo de 2, ninguno de mis subprocesos podrá acceder al recurso. Si configuro el recuento inicial como 1 y el recuento máximo como 2, solo el subproceso del grupo de subprocesos puede acceder al recurso. Solo cuando configuro el recuento inicial y el recuento máximo como 2, 2 subprocesos pueden acceder al recurso al mismo tiempo. Entonces, ¿estoy realmente confundido acerca del significado del recuento inicial?
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