http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Aby utworzyć semafor, muszę podać liczbę początkową i maksymalną. MSDN stwierdza, że początkowa liczba to -
Początkowa liczba żądań semafora, które mogą być przyznane jednocześnie.
Chociaż stwierdza, że maksymalna liczba to
Maksymalna liczba żądań semafora, które mogą być przyznane jednocześnie.
Rozumiem, że maksymalna liczba to maksymalna liczba wątków, które mogą jednocześnie uzyskać dostęp do zasobu. Ale jaki jest pożytek z liczenia początkowego?
Jeśli utworzę semafor z początkową liczbą 0 i maksymalną liczbą 2, żaden z moich wątków wątków nie będzie mógł uzyskać dostępu do zasobu. Jeśli ustawię początkową liczbę na 1 i maksymalną liczbę na 2, tylko wątek puli wątków będzie miał dostęp do zasobu. To jest tylko wtedy, gdy ustawię zarówno początkową liczbę, jak i maksymalną liczbę na 2, 2 wątki mogą jednocześnie uzyskać dostęp do zasobu. Więc jestem naprawdę zdezorientowany co do znaczenia początkowej liczby?
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