https://learn.microsoft.com/en-us/dotne ... aphoreslim
Чтобы создать семафор, мне нужно указать начальное и максимальное количество. В MSDN указано, что начальное количество —
Первоначальное количество запросов для
семафора, которое может быть разрешено
одновременно.
При этом указано, что максимальное количество составляет
Максимальное количество запросов для
семафора, которое может быть разрешено
одновременно.
Я понимаю, что максимальное количество — это максимальное количество потоков, которые могут одновременно обращаться к ресурсу, но какой смысл в начальном счетчике?
Если я создаю семафор с начальным счетчиком 0 и максимальным счетчиком 2, ни один из моих потоков пула потоков не сможет получить доступ к ресурсу. Если я установлю начальный счетчик равным 1, а максимальный счетчик — равным 2, то только один поток пула потоков сможет получить доступ к ресурсу. Только когда я устанавливаю начальное и максимальное количество как 2, 2 потока могут одновременно обращаться к ресурсу. Итак, меня действительно смущает значение первоначального подсчета?
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
Подробнее здесь: https://stackoverflow.com/questions/470 ... tial-count