6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
||||||
1 | ||||||
.NET 4.x Объясните как работает Semaphore02.07.2019, 15:23. Показов 4385. Ответов 8
Метки нет (Все метки)
При задании минимального кол-во запросов(5), как я понимаю семафор выполнит действие, если запросов будет не меньше 5, но к примеру задал 3 запроса и они выполняются, хотя так не должно быть как пишется в подсказке "Начальное кол-во запросов для семафора, которое может быть обеспечено одновременно". Или же семафор выполнит запросы от 1 до 5 указанных?
0
|
02.07.2019, 15:23 | |
Ответы с готовыми решениями:
8
Как реализовать многопоток? (возможно Semaphore) Объясните, как работает код Объясните как работает XMLreader Ряд Фибоначчи. Объясните как можно популярнее как работает рекурсия |
02.07.2019, 17:10 | 2 |
У семафора задано 5 доступных по умолчанию и 10 доступных максимум.
Release() число доступных увеличивает.. Если есть, куда. Wait() число доступных уменьшает. Если есть, куда, не ниже нуля т.е.. Если уменьшать (Wait) уже некуда, то программа будет ждать, пока не появятся новые доступные (Release).
1
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
02.07.2019, 21:31 [ТС] | 3 |
0
|
02.07.2019, 21:34 | 4 |
Сообщение было отмечено Yerta как решение
Решение
Начальное количество 5.
Вы забираете 3. Остаётся 2. Поэтому 3 выполняются. Сам семафор ничего не пишет и не выполняет. Вы у него запрашиваете количество доступных ресурсов. Но это ресурс не семафора, а чего-то другого.
1
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
02.07.2019, 21:44 [ТС] | 5 |
Теперь понятно, спасибо
Добавлено через 6 минут А какую тогда роль сыграет максимальное число запросов 10, если будут заняты все 5 запросов? получается кол-во свободных запросов равны 0.
0
|
02.07.2019, 21:47 | 6 |
5 это начальное количество доступных, что можно снять вызовом Wait. Но вызовом Release вы можете увеличить его до максимума - 10. Попробуете больше этого - вылетит исключение.
Добавлено через 1 минуту Обычное делается Wait, если нужно занять ресурс. И потом Release, когда ресурс уже не нужен.
1
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
02.07.2019, 22:45 [ТС] | 7 |
Исключение получил, когда закомментировал WaitOne.
Кажется я понял как все работает, 5 может принять кол-во вызовов от 1 до 5 за раз, если вызовов больше к примеру 7, то в силу уже вступает 10, т.е. получается 5 тогда уже не играет никакой роли, так как используется 7 из 10 допустимых запросов? Правильно понимаю?
0
|
02.07.2019, 23:08 | 8 |
Нет, всё неправильно.
Добавлено через 7 минут Вот 5 из 10. 5 ресурсов есть и вы их можете взять ( Wait ).Чтобы взять ( Wait ) больше, надо подождать, пока кто-то не поместит (Release ) ещё.Если ресурс уже вам не нужен, надо вернуть/поместить его обратно (Release). Если хотите вернуть ( Release ) слишком много, оно больше указанного ранее количества (10) не влезет и будет ругаться (SemaphoreFullException ).
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
||||||
03.07.2019, 15:12 [ТС] | 9 | |||||
На сколько я понял Release может увеличить кол-во минимальных запросов с 5 к примеру до 8 или же до 10, если больше, то будет исключение.
Вот пример как работает семафор:
else if (count == 12) делает тоже самое что и if(count == 4), сделал для примера. else if (count == 20) освобождает семафор, без увеличения запросов. (данное условие сделал для наглядного отделения от else if (count == 12), чтобы не сливались строки). else if (count > 20) делает тоже самое что и предыдущий if. Для примера, есть библиотека на 4(мин.)-8(еще 4, так сказать запасных) мест и 30 читателей, при открытии библиотеки в 10:00 дня одновременно в нее заходят от 1 до 4 читателя, остальные в очереди на улице. В 12:00 разрешается посещать в максимальном количестве (8), после 14:00 библиотека работает как и в 10:00.
0
|
03.07.2019, 15:12 | |
03.07.2019, 15:12 | |
Помогаю со студенческими работами здесь
9
Объясните как работает этот цикл Объясните как работает алгоритм Цезаря Объясните подробно, как работает код на C# Объясните, пожалуйста, как работает цикл? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |