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 maximum. MSDN déclare qu'un décompte initial est -
Nombre initial de requêtes pour le sémaphore pouvant être accordées simultanément.
Bien qu'il indique que le nombre maximum est
Le nombre maximum de requêtes pour le sémaphore qui peuvent être accordées simultanément.
Je peux comprendre que le nombre maximum est le nombre maximum de threads qui peuvent accéder à une ressource simultanément. Mais, à quoi sert le décompte initial?
Si je crée un sémaphore avec un nombre initial de 0 et un nombre maximum de 2, aucun de mes threads de threadpool ne peut accéder à la ressource. Si je règle le nombre initial sur 1 et le nombre maximum sur 2, seul le thread du pool de threads peut accéder à la ressource. Ce n'est que lorsque je règle le nombre initial et le nombre maximum sur 2, 2 threads peuvent accéder à la ressource simultanément. Donc, je suis vraiment confus sur la signification du décompte 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