http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Pour créer un sémaphore, je dois fournir un nombre initial et un nombre maximal. MSDN indique qu'un compte initial est -
Le nombre initial de demandes de qui peuvent être accordées simultanément.
Bien qu'il soit indiqué que le nombre maximum est de
Le nombre maximum de demandes pour le qui peuvent être accordées simultanément.
Je comprends que le nombre maximum est le nombre maximum de threads qui peuvent accéder simultanément à une ressource, mais à quoi sert le nombre initial ?
Si je crée un sémaphore avec un nombre initial de 0 et un nombre maximal de 2, aucun de mes threads ne peut accéder à la ressource. Si je fixe le nombre initial à 1 et le nombre maximum à 2, seul un thread du pool de threads peut accéder à la ressource. Ce n'est que lorsque je fixe le compte initial et le compte maximum à 2 que 2 threads peuvent accéder à la ressource simultanément. Je ne comprends donc pas très bien l'importance du nombre initial.
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