3 / 3 / 2
Регистрация: 06.06.2014
Сообщений: 95
|
|||||||||||
1 | |||||||||||
Какое назначение у параметров Semaphore Constructor?25.03.2016, 18:26. Показов 1559. Ответов 5
Метки нет (Все метки)
Имеется такой код применения семафора.
0
|
25.03.2016, 18:26 | |
Ответы с готовыми решениями:
5
Назначение команды Format и её параметров Назначение параметров в многопоточной программе Как узнать назначение параметров -aux у ps? Какое назначение может иметь в программе приведенный цикл без тела? |
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
25.03.2016, 20:45 | 2 |
Задает максимально возможное количество одновременных вхождений.
Измените, скажем, с 2 на 3 и посмотрите.
0
|
3 / 3 / 2
Регистрация: 06.06.2014
Сообщений: 95
|
|
26.03.2016, 14:08 [ТС] | 3 |
kolorotur
Я изменил значения и вроде как не вижу принципиально разницы между 2 и 3.
0
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
26.03.2016, 17:13 | 4 |
WolfEater, потому что у вас в примере каждый поток берет одно вхождение и потом его же возвращает, в результате одновременно работает максимум два потока. Если изменить параметр на 3, то работать может максимум 3 потока, но изначально доступно только 2 вхождения (первый параметр). Если сделать один дополнительный вызов Release, то станет доступно и третье вхождение, в итоге смогут работать три потока.
0
|
3 / 3 / 2
Регистрация: 06.06.2014
Сообщений: 95
|
|
28.03.2016, 14:26 [ТС] | 5 |
kolorotur
А если потоков будет больше (например 7 потоков), а в конструкторе задаём параметры 2 и 3, то получается оставшиеся 4 потока будут в ожидании?
0
|
20 / 37 / 9
Регистрация: 09.06.2015
Сообщений: 176
|
|
28.03.2016, 16:05 | 6 |
если просто - sem.Release(); это значит один вышел, один зашёл, в скобках можете проставлять кол-во выходных потоков, тоесть sem.Release(2); два вышло, значит два зайдут
Параметры в static Semaphore sem = new Semaphore(2, 4); обозначают: 4 - сколько всего потоков может находится в критической секции 2 - минимальное значение потоков. Добавлено через 1 минуту mt1.Thrd.Join(); mt2.Thrd.Join(); mt3.Thrd.Join(); здесь вы создали очередь, тоесть пока mt1 работает, mt2 ждёт окончание работы. Визуально выглядит как однопоточность
0
|
28.03.2016, 16:05 | |
28.03.2016, 16:05 | |
Помогаю со студенческими работами здесь
6
Ошибка: Syntax error, "=" constructor but constructor found Какое ключевое слово используется при передаче параметров в расширяющий метод Semaphore Не могу найти класс Semaphore Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |