Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545

Семафор

05.01.2017, 16:21. Показов 5828. Ответов 5

Студворк — интернет-сервис помощи студентам
самый распространенный конструктор класса Semaphore это :
C#
1
 public Semaphore(int initialCount, int maximumCount)
где initialCount обозначает кол-во изначально доступных разрешений, а maximumCount максимальное кол-во разрешений.

создаем семафор
C#
1
Semaphore smph = new Semaphore(2,2);
тут все понятно : когда все разрешения свободны, то их кол-во будет равно maximumCount, и общий ресурс, доступом к которому управляет семафор смогут одновременно использовать 2 потока

а теперь создадим такой
C#
1
Semaphore smph = new Semaphore(1,2);
у него изначально есть только одно разрешение, значит он будет работать как мьютекс?
как количество его разрешений станет равным maximumCount?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2017, 16:21
Ответы с готовыми решениями:

Семафор и синхронизация потоков
Доброе времени суток, не подскажите логику программы и примерно подсказать как написать это и куда рыть. Создать приложение по следующему...

Реализовать семафор на основе объекта синхронизации «событие»
Здравствуйте, помогите пожалуйста. Реализовать семафор на основе объекта синхронизации «событие». Количественные характеристики семафора...

Разобраться с классом семафор, скинуть несколько примеров не сложных программ
Здравствуйте не могли бы вы помочь мне разобраться с классом семафор, скинуть несколько примеров не сложных программ. Таких как эти: ...

5
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.01.2017, 17:36
Цитата Сообщение от TuM0xA Посмотреть сообщение
как количество его разрешений станет равным maximumCount?
Вот так вот:
C#
1
smph.Release();
1
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545
05.01.2017, 18:39  [ТС]
TopLayer, то есть, все будет работать примерно так :
1)жили-были два потока : thrd1 и thrd2
2)они пытаются получить доступ(smph.WaitOne()) к ресурсу, который охраняет Semaphore smph = new Semaphore(1,2);
3) у smph изначально есть 1 разрешение, и он выдает его thrd1(у smph остается 0 разрешений)
4)thrd1, получив доступ к ресурсу, делает свои грязные делишки
5)thrd1 освобождает разрешение(smph.Release())
6)у smph 2 разрешения ???
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.01.2017, 18:57
TuM0xA, семафор работает как счётчик. Метод Release() увеличивает его значение на 1. Метод WaiOne() либо сразу уменьшает его значение на 1, если он имел ненулевое значение, либо блокирует вызывающий поток пока значение счётчика не изменится и только потом уменьшает его значение. При этом, если несколько потоков заблокированы при вызове метода WaitOne() одного семафора, неизвестно какой из них будет первым разблокирован при изменении счётчика.
1
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545
05.01.2017, 19:19  [ТС]
TopLayer, это все понятно, дело в том что Semaphore smph = new Semaphore(1,2);
создает семафор у которого счетчик при старте = 1, а максимальное значение счетчика = 2.
поток1 и поток2 вызвали waitone
поток1 получил разрешение, счетчик стал равен 0(поток2 заблокировался ),поток1 вызвал release, счетчик стал равен 1
- с поток2 получается тоже самое
каким образом счетчик достигнет своего максимального значения(2)?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.01.2017, 22:12
Лучший ответ Сообщение было отмечено TuM0xA как решение

Решение

Цитата Сообщение от TuM0xA Посмотреть сообщение
каким образом счетчик достигнет своего максимального значения(2)?
Например, придет еще один поток и вызовет Release, или какой-то из двух потоков по какому-нибудь условию сделает дополнительный вызов Release.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2017, 22:12
Помогаю со студенческими работами здесь

семафор и потоки
Добрый день господа программисты, так как в системном программировании я нуб, прошу помочь мне в решении задачи: По нажатию на кнопку...

Семафор в ОС
Зачем нужно максимальное и начальное значения в создании семафора hSemaphore = CreateSemaphore( NULL, 1, 1, NULL ); Нужен пример где в ОС...

Семафор
Написать программу, создающую дочерний процесс. Родительский процесс создаёт семафор (сем1) и общий файл. Дочерний процесс записывает в...

Потоки, Java. Семафор
Доброго времени суток форумчане, недавно в обучении столкнулся с потоками, вроде все работает как должно, но иногда при запуске 2 потока...

Java семафор fairness
Здравствуйте! Подскажите пожалуйста, как можно добиться того чтобы ожидающие потоки пробуждались FIFO. Думала сохранять их в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru