http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Щоб створити семафор, мені потрібно вказати початковий та максимальний рахунок. 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