http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Para criar um semáforo, preciso fornecer uma contagem inicial e uma contagem máxima. MSDN afirma que uma contagem inicial é -
O número inicial de solicitações do semáforo que podem ser concedidas simultaneamente.
Embora afirme que a contagem máxima é
O número máximo de solicitações para o semáforo que podem ser concedidas simultaneamente.
Posso entender que a contagem máxima é o número máximo de threads que podem acessar um recurso simultaneamente. Mas, qual é a utilidade da contagem inicial?
Se eu criar um semáforo com uma contagem inicial de 0 e uma contagem máxima de 2, nenhum dos meus threads de threadpool será capaz de acessar o recurso. Se eu definir a contagem inicial como 1 e a contagem máxima como 2, apenas o thread do pool de threads poderá acessar o recurso. Somente quando eu defino a contagem inicial e a contagem máxima como 2, 2 threads podem acessar o recurso simultaneamente. Então, estou realmente confuso sobre o significado da contagem 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